如何避免在node后端项目中出现很长的相对路径import?
发布于 6 年前 作者 athrunsun 5072 次浏览 来自 问答

在一个文件层次较深的node后端项目中,如何避免出现类似require(../../../../xxx)这样很长的相对路径import?

我不想用相对路径import的原因:

  1. 层次深的时候数目录级数费眼神,容易出错
  2. 不可靠,一旦移动文件,路径必须修改

在前端项目中,可以用webpack的alias功能解决这个问题,然而后端项目一般不会使用webpack,尤其是在生产环境上。

那么在node后端项目中如何才能摆脱相对路径import呢?

8 回复

几个思路 自己写一个绝对路径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就搞定了。

使用ts然后alias 23333333

疑 我一直以為 ts 的 paths 只是對於開發時的類型判定有效而已 編譯後的 js 會正確對應??

一般应用开发很少会有很深的目录才对,别玩那些黑科技,先不提风险,单单提你要看代码的时候 CMD+CLICK 都没法跳过去,还会影响到代码提示啥的。 即使长也没问题,反正 IDE 都有智能提示帮你选择文件。

我们日常开发基本上没遇到,一方面是很难有很深的目录,另一方面是 egg 有 loader 机制,无需手动 require。

@bluelovers 不会。typescript编译器不会修改import路径。

回到顶部