加载模块node.js的最佳方法

我的项目有很多文件夹,我经常以下列方式在node.js中加载自己的模块:

var request = require("request"), config = require("../../../modules/config"), urls = require("../../../modules/urls"); 

我有时会移动文件夹和path改变,所以我需要手动调整../部分。

我不想将我的模块移动到node_modules文件夹,但我想以下面的方式加载模块:

 var request = require("request"), config = require("config"), urls = require("urls"); 

要么

 var request = require("request"), config = require("modules/config"), urls = require("modules/urls"); 

我有什么select?

新答案:

相对path似乎是最简单的select,它允许您从任何位置运行脚本。

 var config = require("../../config"); 

老答案:

我发现,虽然不理想,但也有可能使用process.cwd()

 var request = require("request"), config = require(process.cwd() + "/modules/config"); 

或者,如果process.cwd()在主js文件中被设置为一个全局variables

 global.cwd = process.cwd(); 

然后

 var request = require("request"), config = require(global.cwd + "/modules/config"), urls = require(global.cwd + "/modules/urls"); 

您可以尝试根据某些条件执行以下操作

  • 如果脚本是专门为您的应用程序编写的,这意味着它将不能与其他任何应用程序一起工作,并且脚本没有任何依赖关系将它们放置在modules目录下,并尝试创build公开variables,如global.basepath和使用path.join来构造文件path并且需要它。你也可以在应用程序的主脚本中注入模块variables。

main.js

 var config = require('modules/config.js')(_,mongoose,app); 

modules/config.js

 module.exports=function(_,mongoose,app){ return function(){ // _,mongoose,app this.loadConfigVariable.. } } 
  • 如果脚本不是单独testing的单个文件,则需要其他供应商模块才能执行,然后创build单独的节点模块并将其发布到registry中以方便安装主应用程序。 正如明示的那样,主要的应用程序是express并且存在express使用的模块,例如express-validation ,这又有其自身的依赖关系。

您可以在node_modules添加一个符号链接,指向您的模块所在的位置。

例如,添加名为“my_modules”的符号链接,引用“../foo/bar/my_modules”。 那么,你的要求会是这样的

 var config = require('my_modules/config'); var urls = require('my_modules/urls');