如何要求深嵌套的NodeJS模块?
我有以下应用程序结构:
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');
谢谢。
有几种方法来解决这个问题。 一个是把你所有的共享代码(比如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' )
来require( 'lib/config/config.js' )
。
或者,您可以在node_modules
创build一个lib
符号链接,并将其链接到应用程序目录结构中的lib:
application |- node_modules |----- lib -> ../../lib |- lib |------ config |---------- config.js |- routes |------ api |-----------router.js |- Application.js |- package.json
不幸的是,节点docs不鼓励的另一种select是使用NODE_PATH
,它使您可以指定节点的require()
algorithm应该查找的目录。 遵循与lib
相同的模式,你可以这样做:
application |- lib |------ config |---------- config.js |- routes |------ api |-----------router.js |- Application.js |- package.json
并将NODE_PATH
设置为$path_to_application/lib
。
UPDATE
在包含上述选项以及其他一些选项的主题上find了这个伟大的讨论 。
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)