Node / IO.js需要来自项目根目录吗?

时间:2015-05-26 19:43:23

标签: node.js

让我假装我有一个类似的项目结构:

root/
|
-- app.js
-- config.json
-- package.json
-- lib/
   |
   -- config/
      |
      -- config.js

此外,让我假装我想从config.json中读取根config.js(以覆盖默认配置)。我可以做到以下几点:

const path = require('path');
let jsonConfig = {};
try {
  let moduleDir = path.dirname(process.mainModule.filename);
  jsonConfig = require(`${moduleDir}/config.json`);
} catch (e) {}

我的问题是,我应该吗? documentation states

  

检索require.main的备用方法。不同之处在于,如果主模块在运行时更改,则require.main可能仍会引用更改发生之前所需的模块中的原始主模块。通常可以安全地假设这两个模块指的是相同的模块。

我不知道什么条件会导致我的主模块在运行时更改。我认为这将是我自己明确做的事情,但我不熟悉运行时的内部以确定。

编辑以澄清:

我知道我可以使用相对路径,例如require('../../config.json')。但是这使得以后重构/移动lib/config/config.js更加困难如果这是我最终做的事情。因此我希望相对于基础项目目录。

此配置也特定于应用程序。将它放在node_modules下的模块中并不是我想做的事情。我只将npm托管依赖项放在node_modules

我的问题更多是关于依赖process.mainModule而不是require函数可能产生的潜在意外问题。

1 个答案:

答案 0 :(得分:0)

你可以像这样硬编码

Picasso.with(getApplicationContext()).load(currentUrl).into(img, new Callback() {
                    @Override
                    public void onSuccess() {
                        mProgress.dismiss();
                    }

                    @Override
                    public void onError() {
                        mProgress.dismiss();
                    }
                });

或者,您可以利用Node中的node_modules查找功能,并将require('../../config') 移至config.json

node_modules/config/index.json

然后使用

root/
|
-- app.js
-- node_modules
   |
   -- config
      |
       -- package.json
       -- index.json
-- package.json
-- lib/
   |
   -- config/
      |
      -- config.js