Node.js 中使用 TypeScript 的路径别名

2025-05-25

Node.js 中使用 TypeScript 的路径别名

这篇文章最初发表在我的博客上。


几天前,我在我的 TypeScript Node.js 项目中添加了路径别名。我认为它们能让代码看起来更简洁,所以我想向你展示如何在项目中设置它们。

问题

在 Node.js(或者一般的 TS/JS)中,你可以将单个模块导入到代码中。
代码可能如下所示:

import { User } from '../../user/model';
import { Article } from '../../article/model';

import { Cache } from '../../../../cache';
import { MongoDB } from '../../../../mongodb';
Enter fullscreen mode Exit fullscreen mode

注意到这些点('../')来访问上层模块了吗?

我们这里遇到的问题是,项目树越深,访问更高层的模块就需要越多的“../”。说实话,这看起来不太美观。好在我们可以改变这种情况。

解决方案:路径别名

什么是路径别名?

在 TypeScript 中,你可以借助路径别名来避免这些看起来“糟糕”的导入。使用路径别名,你可以声明映射到应用程序中某个绝对路径的别名。

下面是一个简单的例子:

import { User } from '@modules/user/model';
import { Article } from '@modules/article/model';

import { Cache } from '@services/cache';
import { MongoDB } from '@services/mongodb';
Enter fullscreen mode Exit fullscreen mode

在这种情况下,我们的两个别名是

  • @modules 映射到 './src/rest/modules'
  • @services 映射到 './src/services'

设置

让我们开始设置一些路径别名。注意,我不会解释如何在 Node.js 中设置 TypeScript 项目。我假设你已经这样做了。

假设我们有以下项目结构:

folder structure
└───src
   └───rest
   │   │
   │   └───modules
   │   │   │
   │   │   └───article
   │   │   │
   │   │   └───user
   │   │
   │   │   server.ts
   └───services
   │   │    cache.ts
   │   │    mongodb.ts
   │   index.ts
Enter fullscreen mode Exit fullscreen mode

步骤 1:更新 tsconfig.json

首先,我们必须在 tsconfig 文件中声明路径别名

"baseUrl": "./src",
"paths": {
    "@modules/*": ["rest/modules/*"],
    "@services/*": ["services/*"]
}
Enter fullscreen mode Exit fullscreen mode

现在,您可以在应用程序中使用新的路径别名来导入模块。如果您的 IDE(在我的情况下是 VSC)或编译代码时出现任何错误,请重试。

然而,我们还没有完成。当你尝试将 TS 代码编译成 JS 时,你不会看到任何错误。但是,一旦你运行编译后的 JS 代码,你就会收到一个错误:

例如:

Error: Cannot find module '@modules/user'
Enter fullscreen mode Exit fullscreen mode

这是因为 JS 无法解析声明的路径别名的模块。

步骤 2:安装 module-alias 包

接下来,我们将安装一个名为module-alias的 npm 包

npm i --save module-alias
Enter fullscreen mode Exit fullscreen mode

此模块在编译后的 JS 文件中注册路径别名。因此,我们需要对 package.json 进行一些修改:

"_moduleAliases": {
    "@modules": "dist/rest/modules",
    "@services": "dist/services"
  }
Enter fullscreen mode Exit fullscreen mode

请注意,“dist”是编译后的 JS 文件所在的文件夹。

最后但同样重要的是,我们必须在应用程序中注册路径别名。
在启动文件的顶部添加以下行:

import 'module-alias/register';
Enter fullscreen mode Exit fullscreen mode

最后,当您编译并执行代码时,您不应该看到任何导入错误。

您可以在这里找到我目前正在进行的副项目中路径别名的一些示例。

文章来源:https://dev.to/larswaechter/path-aliases-with-typescript-in-nodejs-4353
PREV
每个开发人员都应该根据自己的兴趣加入开发者社区。
NEXT
最全ADB命令手册