module-alias别名设置
设置别名可以简化require引入路径长度,但是node默认不支持,可以借助module_alias
来实现对别名的支持,类似webpack中resolve:{alias:{"util":path.join(__dirname,'src','util')}},
,支持@
符号。
安装
安装:npm install module-alias --save
使用:package.json 中添加
"_moduleAliases": {
"@root": ".",
"@app": "app"
},
app.js 启动项中引入
configWillLoad() {
// 此时 config 文件已经被读取并合并,但是还并未生效
// 这是应用层修改配置的最后时机
// 注意:此函数只支持同步调用
require('module-alias/register');
// 例如:参数中的密码是加密的,在此处进行解密
// 例如:插入一个中间件到框架的 coreMiddleware 之间
}
文件中使用:
以下代表 根路径下的 app / exceptions / http_exceptions.js
文件
const { HttpExceptions } = require('@app/exceptions/http_exceptions');
补充说明
按照上面设置之后,大多数情况下使用时没有问题的,但是在config/plugin.js
config/config.{env}.js
app/extend/xx.js
中使用@
是无效的,原因是这时候,app.js
还没有加载执行,别名设置还没有生效。下面是egg加载顺序:
- 加载 plugin,找到应用和框架,加载 config/plugin.js
- 加载 config,遍历 loadUnit 加载 config/config.{env}.js
- 加载 extend,遍历 loadUnit 加载 app/extend/xx.js
- 自定义初始化,遍历 loadUnit 加载 app.js 和 agent.js
- 加载 service,遍历 loadUnit 加载 app/service 目录
- 加载 middleware,遍历 loadUnit 加载 app/middleware 目录
- 加载 controller,加载应用的 app/controller 目录
- 加载 router,加载应用的 app/router.js
需要在config/plugin.js
中直接引入别名包。require('module-alias/register');