2017-04-03 45 views
1

我創建了一個名爲ctgen的npm包,我需要引用該包中的文件夾。我應該硬編碼對該文件夾的引用嗎?我應該對我的node_modules文件夾進行硬編碼引用嗎?

例如src = './node_modules/ctgen/scaffold'

還是有一個預製功能,將爲我做這個?

對我的問題更清晰一點。我在我的包的以下功能:

var createFile = function (fileName, componentName, doc) { 
    // Tell the user what is happening 
    console.log(chalk.blue('\nCreating', fileName, '...')) 
    // Bring in the scaffold files (note this should point to the scaffold folder in node modules/ctgen) 
    var scaffold = './scaffold/' + fileName 
    fs.readFile(scaffold, 'utf8', function (err, data) { 
    if (err) return console.log(chalk.red(err)) 
    var result = data.replace(/%cname%/g, componentName) 
    if (doc) { 
     var d = new Date() 
     result = result.replace(/%cfname%/g, doc.componentName) 
     result = result.replace(/%cdesc%/g, doc.componentDesc) 
     result = result.replace(/%cauthor%/g, doc.userName) 
     result = result.replace(/%cagithub%/g, doc.userGithub) 
     result = result.replace(/%creationdate%/g, d.getDate() + '/' + d.getMonth() + '/' + d.getFullYear()) 
    } 

    fs.writeFile('./src/components/' + componentName + '/' + fileName, result, function (err) { 
     if (err) return console.log(chalk.red(err)) 
     console.log(chalk.green(fileName, 'created!')) 
    }) 
    }) 
} 

它看起來一個叫腳手架下列文件夾中:

  • view.php
  • style.styl
  • component.json

然後,它將文件拖入緩存中,執行查找並替換某些字符串,然後將輸出寫入fi在用戶項目中。

似乎雖然每當我嘗試引用'scaffold'文件夾時,它都試圖在users項目文件夾中找到它,而不是在我的包文件夾中找到它。

我很猶豫是否通過編寫'/node_modules/ctgen/scaffold'來引用腳手架文件夾,因爲這似乎是對我的錯誤做法。

+0

你能說清楚你需要什麼,爲什麼?是否有一個原因,爲什麼ctgen模塊不能導出你所需要的?你如何確保文件將在那裏? – DrakaSAN

+0

我已經添加了一些更多信息。對不起,我似乎讓它聽起來像它有一個外部的依賴關係,但情況並非如此。我想知道如何確保安裝時我的包可以看到它自己的文件夾結構。 –

回答

2

你想要的是__dirname

如果我理解你的問題,你有一個包含在你的模塊中的資源文件夾,並且無法訪問它,因爲當前路徑是應用程序的路徑,而不是你的模塊。

__dirname將包含腳本文件的路徑,因此將指向您的模塊文件。

我假設你的模塊被命名爲ctgen,並且你想訪問的文件在ctgen/scaffold中。因此,在您的代碼中,嘗試訪問__dirname/scaffold

+0

這正是我所期待的。謝謝。 –

0

如果要創建一個NPM包,你package.json內指定依賴NPM模塊,並以此作爲旨在節點(與require('your-dependent-module-name'))。在你發佈你的模塊和某人npm install --save your-module之後,它還會將你的依賴關係安裝到[usrDir]/node_modules/[your-module]/node_modules中,在那裏你的模塊將會找到它所需要的東西。

那個beeing說;是的,你可能參考__dirname + 'node_modules/[something]但這不會很聰明,因爲它假設用戶如何使用您的模塊。同時,node + npm爲你解決了這個問題,所以你沒有理由這麼做)

+0

謝謝。我想我的問題不清楚。這與外部依賴關係無關,我只想在有人安裝它時訪問我自己的包內部文件夾結構。我已經爲我的問題添加了更多信息。希望現在更清楚一點。 –

相關問題