如何解决相对路径地狱(带有打字稿的节点)

Dan*_*les 7 relative-path node.js typescript tsconfig tsconfig-paths

我正在使用节点、打字稿和其他包开发 CLI。这个想法很简单,CLI 为您提供了节点项目的初始结构(javascript 或 typescript)

\n

嗯,在测试的时候,我发现了一个问题,我好几天都无法解决。初始结构为:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80api\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.controller.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.interface.ts (just for typescript projects)\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.routes.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.service.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80config\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80environments\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80development.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80index.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80production.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80global\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80services\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80abstract.service.ts (just for typescript projects)\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80middlewares\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80database.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80index.ts/js\n\xe2\x94\x82    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80server.ts/js\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.editorconfig\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.env\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80package-lock.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80tsconfig.json (just for typescript projects)\n
Run Code Online (Sandbox Code Playgroud)\n

Typescript 服务文件扩展了抽象服务(这个位于 参考资料中./src/global/services/abstract.service.ts)。每个组件都位于./src/api目录中并具有其各自的文件夹(如用户组件)。在users组件中导入抽象类的相对路径是../../global/services/abstract.service

\n

但是您可以在不同的目录中创建组件,因此之前的相对路径不起作用。为了解决这个问题,我决定使用像 webpack 这样的路由配置。所以我不想使用以前的相对路径,而是想使用这样的东西@global/services/abstract.service

\n

如果节点项目使用 javascript 和 babel,我就实现了这一点:

\n
    \n
  • @babel/polyfill
  • \n
  • @babel/cli
  • \n
  • @babel/核心
  • \n
  • @babel/节点
  • \n
  • @babel/预设节点
  • \n
  • babel-插件模块-解析器
  • \n
\n

但当是打字稿项目时我没有实现这一点。有tsconfig.json“路径”选项,这在开发中有效,但是当我将打字稿编译为 javascript 时,这不起作用。我尝试了很多方法来解决这个问题,但一切都失败了。这些是我到目前为止使用过的软件包:

\n
    \n
  • 链接模块别名 ()
  • \n
  • ts-node 与 tsconfig-path
  • \n
  • 打字稿
  • \n
  • @zerollup/ts-变换路径
  • \n
\n

第二个工作正常,但我必须重新启动我在 ts 文件中所做的每个更改,也许我没有在 中正确配置脚本package.json,因为 tsc-watch 不起作用)。我看到的链接:

\n\n

请,如果有人知道如何解决相对路径地狱,如果你告诉我如何解决,并提供示例或其他东西来帮助我,我将不胜感激

\n