簡體   English   中英

在Node.js中,模塊如何從應用程序的package.json中獲取數據?

[英]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.jscd 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM