Nodejs下更好的本地require()
当你的Nodejs项目很大,并且有很多目录结构的时候(比如Express) 使用require()
方法来载入其他文件看起来会像这样:
var logger = require('../../../utils/logger);
这也鸡儿丑了吧! 在要是日后项目结构改变了,修改也很麻烦。
解决方案
1.使用模块
安装一个模块(这里使用app-module-path作为例子。
npm i app-module-path -s
在你的项目启动文件里加入:
require('app-module-path').addPath(__dirname);
接下来,在其他文件里需要加载文件,就轻松很多了:
var logger = require('utils/logger')
注: 如果你的启动文件不在项目根目录,记得修改__dirname
。
2. 设置 NODE_PATH
将 NODE_PATH
环境变量设置为项目的根目录,之后所有的载入都可以很方便地像上面那种方法了。
在启动项目之前,设置环境变量
- Linux:
export NODE_PATH=.
- Windows:
set NODE_PATH=.
或者干脆使用cross-env,
在package.json
的启动脚本中像下面这样写:
{
"scripts": {
"build": "cross-env NODE_PATH=. node app"
}
}
3. 设置 Global
- 在项目启动文件中:
global.__base = __dirname + '/';
- 在另一个文件:
var logger = require(__base + 'utils/logger')