当你的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

  1. 在项目启动文件中:
global.__base = __dirname + '/';
  1. 在另一个文件:
var logger = require(__base + 'utils/logger')