加载模块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');