在一个文件层次较深的node后端项目中,如何避免出现类似require(../../../../xxx)
这样很长的相对路径import?
我不想用相对路径import的原因:
- 层次深的时候数目录级数费眼神,容易出错
- 不可靠,一旦移动文件,路径必须修改
在前端项目中,可以用webpack的alias功能解决这个问题,然而后端项目一般不会使用webpack,尤其是在生产环境上。
那么在node后端项目中如何才能摆脱相对路径import呢?
几个思路 自己写一个绝对路径remap的函数,require的时候 require(remap(’/src/path/to/module’)) 但是remap也要require进来,可以考虑发布到npm之类的
或者hook require函数 写一个hook-require.js 在入口文件头部 require 进来 const originalRequire = Module.prototype.require Module.prototype.require = function(path) { const transformedPath = transfrom(path) return originalRequire(transformedPath) } 相应的库有 https://www.npmjs.com/package/module-alias
再或者,自己改一改repl,在repl里hook require函数,或者在运行前做transform,比如用babel的babel-plugin-module-resolver https://nodejs.org/api/repl.html
@noe132 module-alias这个package看起来不错(虽然它还是修改了默认require的行为…)!谢谢! 看来还是typescript更方便,tsconfig.json里加个baseUrl就搞定了。
@noe132 你觉得使用NODE_PATH
环境变量这个方法怎么样?
使用ts然后alias 23333333
疑 我一直以為 ts 的 paths 只是對於開發時的類型判定有效而已 編譯後的 js 會正確對應??
alias.
一般应用开发很少会有很深的目录才对,别玩那些黑科技,先不提风险,单单提你要看代码的时候 CMD+CLICK 都没法跳过去,还会影响到代码提示啥的。 即使长也没问题,反正 IDE 都有智能提示帮你选择文件。
我们日常开发基本上没遇到,一方面是很难有很深的目录,另一方面是 egg 有 loader 机制,无需手动 require。
@bluelovers 不会。typescript编译器不会修改import路径。