Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何要求深层嵌套的NodeJS模块?_Javascript_Node.js_Require_Node Modules - Fatal编程技术网

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:不确定您的想法,但我刚刚找到了解决此问题的选项,并更新了我的答案