如何要求深嵌套的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'); 

谢谢。

       

网上收集的解决方案 "如何要求深嵌套的NodeJS模块?"

有几种方法来解决这个问题。 一个是把你所有的共享代码(比如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)