我有以下应用程序结构:
application
|- config
|----- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
在/routes/api/router.js模块中我需要/config/config.js文件并执行以下操作:
require('../../config/config.js');
我发现上面的代码很难看,并希望让它更漂亮。此外,如果我将/routes/api/router.js
移动到另一个文件夹,我必须重构所有要求。需要这些模块的最佳实践是什么,是否可以从应用程序文件夹根目录中获取config.js,如下所示:
require('/config/config.js');
感谢。
答案 0 :(得分:3)
有几种方法可以解决这个问题。一种方法是将所有共享代码(如config.js
)放在node_modules
下的目录中(使用lib
,以防您希望其中包含config
以外的目录) :
application
|- node_modules
|----- lib
|---------- config
|-------------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
那么你可以使用require( 'lib/config/config.js' )
来要求config.js。
或者,您可以在lib
中创建一个node_modules
符号链接,并将其链接到应用程序目录结构中的lib:
application
|- node_modules
|----- lib -> ../../lib
|- lib
|------ config
|---------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
节点文档不鼓励另一种替代方法是使用NODE_PATH
,它允许您指定节点require()
算法应该查看的目录。按照与上面lib
相同的模式,你可以这样做:
application
|- lib
|------ config
|---------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
并将NODE_PATH
设为$path_to_application/lib
。
<强>更新强>
找到关于该主题的this great discussion,其中包括上述选项以及其他一些选项。
答案 1 :(得分:0)
require('/config/config.js');
将无法正常工作,因为您使用的是系统的根目录(os),而不是应用程序的根目录。
var path=require('path');
var root=path.dirname(process.mainModule.filename);
或
var root=process.cwd();
将为您提供应用程序的根目录。导航到config.js
path.resolve(root,'config/config.js)
答案 2 :(得分:0)
最简单的解决方案是使用path.resolve。如果您只提供path.resolve
的相对路径,那么它假定它们相对于当前工作目录,即项目根目录。所以你需要的只是:
const path = require('path');
path.resolve('config/config.js');