Webpack resolve.alias无法与TypeScript一起使用吗?

TypeScript Webpack

泡芙Green

2020-03-24

我尝试缩短TypeScript中的导入时间

import {Hello} from "./components/Hello";

import {Hello} from "Hello";

为此,我发现您可以resolve.alias在webpack中使用,因此我将该部分配置如下

resolve: {
    root: path.resolve(__dirname),
    alias: {
        Hello: "src/components/Hello"
    },
    extensions: ["", ".ts", ".tsx", ".js"]
},

Webpack构建,并且输出bundle.js有效。但是TypeScript的智商抱怨它cannot find the module

所以我的问题是webpack的resolve.alias是否适用于TypeScript?

我发现了以下问题,但没有答案。

第3733篇《Webpack resolve.alias无法与TypeScript一起使用吗?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

5个回答
NearANear 2020.03.24

有2例

  1. 当您编写自定义Webpack时,它可以使用Typescript,但不能直接使用。解释一下,后台有两种编译类型。首先是tsx-> tsconfig.json扮演角色的js,但是当您实际编译js代码时,webpack就会出现。因此,对于别名,应在两个位置(即tsconfig和webpack中)放置解析,以成功运行应用程序
  2. 使用default时(创建react应用后):只需添加"baseUrl": "./src"tsconfig并查看代码即可。
樱蛋蛋 2020.03.24

如其他人所述,您需要alias在webpack.config.js中提供一个

    resolve: { 

        extensions: [".ts", ".js"],
        alias: {
            forms: path.resolve(__dirname, "src/forms/")
        } 
    },

这需要与您的tsconfig.json文件同步(需要baseUrl和路径)。

"compilerOptions":  {
    baseUrl: "./",
    ...
    paths: {
       "forms/*": ["src/forms/*"]
    }
}

注意:必须使用通配符模式才能与您的解析别名配置匹配。

然后,您可以使用别名导入任何库:

import { FormsModule } from "forms/my-forms/my-forms.module";
小卤蛋神乐 2020.03.24

如果你使用ts-loader,你可能需要您的WebPack同步alias/ resolve设置请paths在您的设置tsconfig.json

{
    "compilerOptions": {
        "baseUrl": "./",
        "paths": {
            "Hello": ["src/components/Hello"]
        }
    }
}

如果您使用awesome-typescript-loader,则可以的WebPack自动从算出这个paths设置在你的tsconfig.json,按从回购这一问题上的地位这样,您无需在Webpack alias字段中重复相同的信息

2020.03.24

如果仍然有人遇到此问题,请不要忘记将文件夹添加到tsconfig.json的“ include”选项中,如下所示:

{
  "compilerOptions": {
    "sourceMap": true,
    "allowJs": true,
    "baseUrl": "./",
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "target": "es5",
    "module": "es2015",
    "moduleResolution": "node",
    "lib": [
      "es2016",
      "dom"
    ]
  },
  "outDir": "./built/",
  "include": [
    "./src/**/*",
    "./tests/**/*"
  ]
}
猴子 2020.03.24

Dudes,您缺少tsconfig.json中的一个非常重要的要点:匹配模式!

应该这样配置:

"baseUrl": ".",
"paths": {
    "appSrc/*": [
        "src/*"
    ]
 }

“ *”是告诉TS匹配右侧任何内容的重要部分。

我从这篇文章中发现了这一点:https : //medium.com/@martin_hotell/type-safe-es2015-module-import-path-aliasing-with-webpack-typescript-and-jest-fe461347e010

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android