NodeJS TypeScript 使用 module-alias 路径别名

339 阅读1分钟

第一种方式 alias.config.ts

  1. 安装 module-alias
pnpm i --save module-alias
  1. alias.config.ts
import path from "path";
import alias from "module-alias";

alias.addAliases({
  "@root": path.resolve(__dirname),
  "@src": path.resolve(__dirname, "./src"),
  "@configs": path.resolve(__dirname, "./src/configs"),
  "@models": path.resolve(__dirname, "./src/models"),
  "@routes": path.resolve(__dirname, "./src/routes"),
  "@controllers": path.resolve(__dirname, "./src/controllers"),
  "@services": path.resolve(__dirname, "./src/services"),
  "@middleware": path.resolve(__dirname, "./src/middleware"),
  "@utils": path.resolve(__dirname, "./src/utils"),
});
  1. tsconfig.json 配置

注意: tsconfig.json 内配置的别名要和 alias.config.ts 的一致

{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": true,
    "noImplicitAny": false,
    "esModuleInterop": true,
    "outDir": "./dist",
    "baseUrl": ".",
    "paths": {
      "@root": ["."],
      "@src": ["src"],
      "@utils": ["src/utils"],
      "@configs": ["src/configs"],
      "@routes": ["src/routes"],
      "@models": ["src/models"],
      "@services": ["src/services"],
      "@controllers": ["src/controllers"],
      "@middlewares": ["src/middlewares"]
    }
  },
  "include": ["app.ts", "src/**/*"],
  "exclude": ["node_modules", "**/*.spec.ts", "dist"]
}
  1. 主入口内引入 alias.config.ts
// app.ts
import "./alias.config";
import { getData } from "@utils";
import { setConfig } from "@configs";

getData();
setConfig();

第二种方式 package.json

  1. package.json
{
  "_moduleAliases": {
    "@root": ".",
    "@models": "src/models",
    "@routes": "src/routes",
    "@utils": "src/utils",
    "@configs": "src/configs"
  }
}
  1. 使用
import "module-alias/register";
import { getData } from "@utils";
import { setConfig } from "@config";

getData();
setConfig();