Nodejs tsconfig 配置 paths 后运行提示找不到模块是什么意思啊?

发布于 1周前 作者 yibo5220 来自 nodejs/Nestjs

Nodejs tsconfig 配置 paths 后运行提示找不到模块是什么意思啊?

tsconfig.json

...
    "baseUrl": ".",
    "paths": {
      "[@share](/user/share)/*": [
        "../share/*"
      ]
    }
...

jsconfig.json

{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "[@share](/user/share)/*": [
                "../share/*"
            ]
        },
        "target": "ES6",
        "module": "commonjs",
        "allowSyntheticDefaultImports": true
    },
    "include": [
        "**/*.ts"
    ],
    "exclude": [
        "node_modules"
    ]
}

在 index.ts 配置require('module-alias/register');

这时候运行,导入import { Rst } from '[@share](/user/share)/core/vo';的地方就会报错,提示找不到模块,是不是 module-alias 必须要分开声明啊?不能用星号全部声明?


6 回复

需要引入 react-rewrite 这个,改写一下 start 部分的脚本,让其通过 rewrite 启动


这个是要改 webpack 的配置,光设置 path 只告诉了 vscode 去哪里找,没告诉编译器去哪里找

我没用 webpack 啊,node 项目,我永的 module-alias 貌似不行

试试…/share/**/*这样写?这个配置文件我也很迷糊,版本不同还不一样

本地开发的话一般不需要使用 module-alias,tsconfig.json 中的 paths 就可以了,但要让打包后项目中模块路径查找正常的话就需要加入 module-alias,最好在入口文件判断环境变量来觉得使用使用 module-alias,比如:
js<br>// addAlias.ts<br>import moduleAlias from 'module-alias'<br>import path from 'path'<br><br>export default () =&gt; {<br> moduleAlias.addAliases({<br> '@share': path.join(__dirname, 'src/share')<br> })<br>}<br><br>

js<br>// app.ts<br>import addAlias from './addAlias'<br><br>if (process.env.NODE_ENV !== 'development') {<br> addAlias()<br>}<br>

在 Node.js 项目中使用 TypeScript 时,配置 tsconfig.json 中的 paths 选项可以帮助你设置模块解析路径的别名,这在大型项目中非常有用,因为它可以简化模块间的引用。然而,配置后运行时提示找不到模块,通常是因为 Node.js 本身不支持 TypeScript 的路径别名解析。

要解决这个问题,你需要使用一个工具来拦截 Node.js 的模块加载过程,并将路径别名转换为实际的文件路径。一个常用的工具是 ts-node 配合 tsconfig-paths 模块。

下面是一个基本的示例,展示如何在 Node.js 环境中使用这些工具来支持 TypeScript 的路径别名:

  1. 安装必要的依赖:
npm install --save-dev ts-node tsconfig-paths typescript
  1. 在你的启动脚本(如 index.ts)中,添加以下代码来配置路径别名解析:
import 'tsconfig-paths/register';

// 你的其他代码
import something from '@/path/to/module';
  1. 确保你的 tsconfig.json 中正确配置了 pathsbaseUrl
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}
  1. 使用 ts-node 来运行你的 TypeScript 文件:
npx ts-node index.ts

这样配置后,ts-node 会通过 tsconfig-paths 解析路径别名,从而避免找不到模块的错误。

回到顶部