nodejs中使用别名映射,兼容webpack的@和best-require 的:xxx 别名映射
项目地址: https://github.com/langyuxiansheng/biu-server-admin
写在前面
研究了很久,找了很多资料发现都没有,只好自己去想办法,查资料.才弄好的,凌晨发布的,转载请注明出处.
在做nodejs项目开发的时候,你是不是也在为
require('./posts');
require('./controllers/posts');
require('../controllers/posts');
require('../../controllers/posts');
require('../../../apis/controllers/posts');
或者
require(ROOT_PATH + '/application/apis/controllers/posts');
// other require()...
require(ROOT_PATH + '/application/apis/controllers/users');
require(ROOT_PATH + '/application/apis/controllers/products');
require(ROOT_PATH + '/application/apis/services/rest');
require(ROOT_PATH + '/application/apis/config');
这样的写法而困扰;
那看完这篇文章,从此之后就可以告别这个烦恼了;
感谢一下 best-require 这个模块包的作者,不然还需要自己去写这个
npmjs 链接 https://www.npmjs.com/package/best-require
github 链接 https://github.com/yuezhihan/best-require
不废话了,进入正题 往下看:
- 安装库 best-require 进行别名映射
npm i best-require --save
- 映射别名. 实例在本项目中 server/index.js 中
const path = require('path');
const ROOT_PATH = process.cwd();
const SRC_PATH = path.join(ROOT_PATH, /server/src
);
console.log(ROOT_PATH, SRC_PATH);
//映射目录别名
require('best-require')(ROOT_PATH, {
root: ROOT_PATH,
src: SRC_PATH,
controllers: path.join(SRC_PATH, '/controllers'),
models: path.join(SRC_PATH, '/models'),
routes: path.join(SRC_PATH, '/routes'),
crawlers: path.join(SRC_PATH, '/crawlers'),
services: path.join(SRC_PATH, '/services'),
middleware: path.join(SRC_PATH, '/middleware'),
lib: path.join(SRC_PATH, '/lib'),
config: path.join(SRC_PATH, '/config'),
logs: path.join(SRC_PATH, '/logs')
});
//运行服务
require('./src/bin/Server').run();
- 设置 jsconfig.json
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"baseUrl": "./",
"paths": {
"@/": ["client/"],
":root/": [""],
":config/": ["server/src/config/"],
":lib/": ["server/src/lib/"],
":services/": ["server/src/services/"],
":controllers/":["server/src/controllers/"],
":models/": ["server/src/models/"],
":routes/": ["server/src/routes/"],
":crawlers/": ["server/src/crawlers/"],
":middleware/": ["server/src/middleware/"],
":logs/": ["server/src/logs/"]
}
},
"include": ["server/*/","client/*/"],
"exclude": [
"node_modules",
"nuxt-dist",
"server-dist"
]
}
- vscode要安装 path-intellisense 插件 并在设置中配置setting.json
vscode 中的设置,setting.json
workspaceRoot 是当前的工作空间,就是当前编辑器打开的目录.
配置如下
{
"path-intellisense.mappings": {
"@": "${workspaceRoot}/client",
":root": "${workspaceRoot}",
":lib": "${workspaceRoot}/server/src/lib",
":controllers": "${workspaceRoot}/server/src/controllers",
":models": "${workspaceRoot}/server/src/models",
":routes": "${workspaceRoot}/server/src/routes",
":crawlers": "${workspaceRoot}/server/src/crawlers",
":services": "${workspaceRoot}/server/src/services",
":middleware": "${workspaceRoot}/server/src/middleware",
":config": "${workspaceRoot}/server/src/config",
":logs": "${workspaceRoot}/server/src/logs",
}
}
- 重启vscode,试试看吧!
作者的目录结构
vue中使用
后续更新
nodejs中使用sequelize的model映射,这样就解决了没得提示的烦恼了,让你的效率提升2个档次
写在后面
如果你遇到难题或者有疑问,有好的建议请留言反馈.
这种提示以及Ctrl + 鼠标左键的跳转,只针对 .js 的文件, .vue的没试过.这个也只是为了解决 js方法映射后没提示的问题.