我的个人博客

使用模块别名简化你的 Node.js 项目

White and black one way printed road signages
Published on
/3 mins read/---

最近,我一直在业余时间使用 Node.js 开发一个个人项目,以增进我的知识并防止技能退化。然而,我遇到了许多开发者可能都经历过的令人沮丧的路径问题。

import { saveUser } from '../../../../../models/User'
import homeController from '../../../../../controllers/home'

对于需要确定要遍历多少个文件夹才能找到所需文件的开发者来说,这段代码可能是一个头痛的问题。如果你需要将文件移动到不同的文件夹,你必须更新所有导入该模块的文件中的路径 .

但是,如果我们可以为整个项目中经常导入的模块定义别名(即快捷方式)呢?

例如:

import { saveUser } from '@models/User'
import homeController from '@controllers/home'

其中:

  • @models 等同于 ./src/models/*

  • @controllers 等同于 ./src/controllers/*

使用 module-aliastsconfig.json 配置,解决方案非常简单。按照以下说明进行设置:

更新 tsconfig.json

打开 tsconfig.json 文件,并在 compilerOptions 对象中添加以下配置:

tsconfig.json
"compilerOptions": {
  // 其他配置...
  "baseUrl": "./src",
  "paths": {
      "*": [
          "node_modules/*",
          "src/types/*"
      ],
      "@controllers/*": [
          "controllers/*"
      ],
      "@models/*": [
          "models/*"
      ]
  }
}

这里,@controllers@models 是你的模块的别名(你可以使用任何你喜欢的命名约定,它不必以 @ 开头 — 那只是我用来区分的前缀)。

现在你可以在项目中使用配置好的别名,但你会遇到模块导入错误:

[Node] Error: Cannot find module '@models/User'

安装 module-alias

这个包在编译后的 JS 文件中解析路径别名。

  • 使用以下命令安装:

    npm i --save module-alias # 或 yarn add module-alias
  • package.json 中配置:

    package.json
    "_moduleAliases": {
      "@models": "dist/models",
      "@controllers": "dist/controllers"
    }

注意,dist/ 是包含构建后代码的文件夹(根据你的配置,它可能是 dist/build/ 等)。

  • 最后,在你的应用中注册模块:

    import 'module-alias/register'

在你的项目启动文件中只导入一次(如 index.tsapp.tsserver.ts 等)。

完成

现在你可以重新加载你的 IDE,启动项目,并在整个项目中使用别名。

VS Code 推荐

VS Code 通过读取 tsconfig.json 文件支持此功能。只需重新加载它即可使用该功能。

祝你好运!

参考资料