![](/img/trans.png)
[英]How to add a Node Module's script from the package.json file to the Root package.json file
[英]In Node.js, how can a module get data from an application's package.json?
我有一個模塊。 在其中,我想從我父應用程序的package.json文件中訪問數據。 這樣做的最佳做法是什么?
我通過上升2級並需要文件(或使用nconf配置加載器)來做到這一點。
var appdir = path.resolve(__dirname, '../../');
nconf.file('app', path.join(appdir, 'package.json'));
但這似乎很容易破裂。
我也聽說過pkginfo ,它會自動從我自己的模塊的package.json中獲取信息,但我希望從父應用程序中獲取數據。
謝謝你的幫助!
編輯:我想另一種問的方式是,我如何獲得應用程序的路徑(而不是模塊路徑)?
您可以使用
require.main.require './package'
但只有當您的父應用程序的文件位於其目錄的根目錄中時,它才會起作用。
你也可以將它包裝成try ... catch
並添加../
到path,直到找到package.json
。
您可以在這里閱讀有關訪問主模塊的更多信息http://nodejs.org/api/modules.html#modules_accessing_the_main_module
添加到pcru的方法,這應該工作:
function loadMainPackageJSON(attempts) {
attempts = attempts || 1;
if (attempts > 5) {
throw new Error('Can\'t resolve main package.json file');
}
var mainPath = attempts === 1 ? './' : Array(attempts).join("../");
try {
return require.main.require(mainPath + 'package.json');
} catch (e) {
return loadMainPackageJSON(attempts + 1);
}
}
var packageJSON = loadMainPackageJSON();
請記住,這將為您提供主要模塊,您認為這是您想要的,但如果您正在構建一個像我一樣的命令行工具,那么您真正想要的是將package.json正好放在上面的兩個文件夾中如果您的工具要在本地安裝並使用npm run-script
調用,那么您的安裝位置
正如在運行node.js應用程序中確定項目根目錄中所述,到達應用程序路徑的最簡單方法之一是使用process.cwd()
,前提是您必須始終從同一目錄啟動主js程序。 即node app/main.js
和cd app && node main.js
將給出不同的結果。
另一種方法是遞歸地跟隨對module.parent
的引用,然后在未定義module.parent
時讀出module.filename
。 這也預先假定了一些關於您的應用程序的知識。 如果主腳本相對於package.json的位置可能不同,它將無法工作。 即你必須知道主腳本是在app目錄的根目錄中,還是在某種'bin','app'或'lib'目錄中。 但是,一旦找到頂級模塊,就可以嘗試使用pkginfo用於查找當前文件的package.json的相同算法找到最近的package.json。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.