Typescript 模块解析不起作用

Typescript module resolution not working

我想像这样导入我的模块,而不是相关模块导入:import { IntHelper } from 'utils/IntHelper';。尽管 intellisense 在 VSCode 中工作正常,但转译的 javascript 文件抛出异常:Cannot find module.

我的项目结构:

文件:MyProject.ts

import { IntHelper } from 'utils/IntHelper';

文件:IntHelper.ts

export module IntHelper {
  export const xy: string = 'Test';
  export function crossSum(int: number) {
    return int; // Nonsense - ofcourse.
  }
}

Tsconfig.json:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "noImplicitAny": true,
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist",
    "baseUrl": ".",
    "paths": {
        "*": [
            "*",
            "src/*"
        ]
    }
  }
}

我的问题:

为什么它在 javascript 文件中抛出 cannot find module 异常,即使它在打字稿文件中看起来没问题?当我将 'utils/IntHelper' 部分悬停在打字稿文件 VSCode 的导入行中时,也会显示该模块的正确路径。

您和许多其他人有同样的问题,相信 TypeScript 编译器会将解析后的路径保存到 JS 文件。事实并非如此。你需要自己解决这个问题,或者使用工具,WebPack 通常是人们建议的(然而,WebPack 是一个怪物),请看这个答案:

Typescript2 path module resolution

这很可能也能解决您的问题!

当然,在您的情况下,节点会对模块感到困惑,因为它希望所有非相对路径都出现在 node_modules 中。打字稿的好解决方案是像这样使用 tsconfig 的 paths 部分:

{
  "compilerOptions": {
    "paths": {
        "@utils": [
            "src/utils/*"
        ]
    }
  }
}

现在我们可以

import { IntHelper } from '@utils/IntHelper';

但我们仍然需要通知 webpack 或 node out 路径配置:

// for node:
--require tsconfig-paths/register

// for webpack
const TsConfigPathsPlugin = require('awesome-typescript-loader').TsConfigPathsPlugin;


      resolve: {
        plugins: [
          new TsConfigPathsPlugin(),
        ]
      },

我遇到了类似的问题。为我解决的问题还必须在 webpack.config.js 文件中定义别名。

resolve: {
    alias : {
        alias: {
            "@components": path.resolve(__dirname, "../src/components/"),
            "@constants": path.resolve(__dirname, "../src/constants/"),
            ....
        }
    }
}

扩展 Patrick_Forseberg 上面的

issue 中没有正式的解决方法,但是有一个(非常)流行的第三方 npm 包 tsconfig-paths 完美地解决了我的问题。

多亏了eyedean for mentioning这个包。

确保里面ts-config.json

{
"compilerOptions": {
...
    "baseUrl" : "***this path must point to your project directory***"
....
}

注意:我目前在节点 v14.16.0 和打字稿 4.4.2