Javascript 如何要求深层嵌套的NodeJS模块?
我有以下应用程序结构:Javascript 如何要求深层嵌套的NodeJS模块?,javascript,node.js,require,node-modules,Javascript,Node.js,Require,Node Modules,我有以下应用程序结构: application |- config |----- config.js |- routes |------ api |-----------router.js |- Application.js |- package.json application |- node_modules |----- lib -> ../../lib |- lib |------ config |---------- config.js |- routes |------ ap
application
|- config
|----- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
application
|- node_modules
|----- lib -> ../../lib
|- lib
|------ config
|---------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
在/routes/api/router.js模块中,我需要/config/config.js文件并执行以下操作:
require('../../config/config.js');
require('/config/config.js');
我发现上面的代码很难看,想让它更漂亮。另外,如果我将/routes/api/router.js
移动到另一个文件夹,我必须重构所有需要的文件。需要这些模块的最佳实践是什么?是否可以从应用程序文件夹根目录中要求config.js,如下所示:
require('../../config/config.js');
require('/config/config.js');
谢谢
require('/config/config.js');
将无法工作,因为您使用的是系统的根(os)而不是应用程序的根
var path=require('path');
var root=path.dirname(process.mainModule.filename);
或
将为您提供应用程序的根目录。导航到config.js
path.resolve(root,'config/config.js)
有几种方法可以解决这个问题。一种是将所有共享代码(如
config.js
)放在node\u modules
下的一个目录中(在这里使用lib
,以防您想在其中包含config
以外的目录):
因此,您可以使用require('lib/config/config.js')
要求config.js
或者,您可以在node\u modules
中创建lib
符号链接,并将其链接到应用程序目录结构中的lib:
application
|- config
|----- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
application
|- node_modules
|----- lib -> ../../lib
|- lib
|------ config
|---------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
不幸的是,节点文档不鼓励使用另一种替代方法,即使用它可以指定节点的require()
算法应该查看的目录。按照与上面使用lib
相同的模式,可以执行以下操作:
application
|- lib
|------ config
|---------- config.js
|- routes
|------ api
|-----------router.js
|- Application.js
|- package.json
并将NODE_PATH
设置为$PATH_to_application/lib
更新
可在包含上述选项和其他一些选项的主题中找到。最简单的解决方案是使用。如果您只为
path.resolve
提供相对路径,则它假定它们是相对于当前工作目录(即项目根目录)的。因此,您所需要的是:
const path = require('path');
path.resolve('config/config.js');
谢谢你的回答。我喜欢你提供的第二种方法。是否可以在nodejs应用程序本身中创建符号链接,而不是在操作系统中创建符号链接?@Erik:不确定您的想法,但我刚刚找到了解决此问题的选项,并更新了我的答案