TypeScript 相对路径导入在 Webpack 中不起作用

faf*_*aro 5 typescript webpack

我使用相对路径在 TypeScript 中导入了一个模块。

// index.ts
import {Widget} from './components/Widget';
Run Code Online (Sandbox Code Playgroud)

Webpack 给了我以下错误:

// index.ts
import {Widget} from './components/Widget';
Run Code Online (Sandbox Code Playgroud)

我的 webpack 配置文件非常基本,规则中有 ts-loader 并指向 index.ts 作为入口文件。

我在这里做错了什么?


附加信息:

项目文件夹结构:

c:\project
?? src
?  ?? index.ts
?  ?? components
?     ?? Widget.ts
?? webpack.config.js
?? tsconfig.json
Run Code Online (Sandbox Code Playgroud)

网络包配置:

const path = require('path');

const config = {
  entry: './src/index.ts',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  module: {
    rules: [
      { test: /\.tsx?$/, use: 'ts-loader' }
    ]
  }
};

module.exports = config;
Run Code Online (Sandbox Code Playgroud)

配置文件

{
    "compilerOptions": {
        "outDir": "dist",
        "module": "commonjs",
        "target": "es6"
    },
    "include": [ "src/**/*" ],
    "exclude": [
        "node_modules"
    ]
}
Run Code Online (Sandbox Code Playgroud)

版本:

webpack 3.1.0
typescript 2.4.1
ts-loader 2.2.2
Run Code Online (Sandbox Code Playgroud)

faf*_*aro 10

添加resolve.extensions到您的 webpack.config.js。

{
    resolve: {
        extensions: ['.ts', '.js', '.json']
    }
}
Run Code Online (Sandbox Code Playgroud)

当您在其中一个模块 ( ref ) 中编写无扩展名的导入时,webpack 中的模块解析默认为仅搜索.js.json文件。

所以当你写:

import {Widget} from './components/Widget';
Run Code Online (Sandbox Code Playgroud)

Webpack 默认只搜索这些文件:

{
    resolve: {
        extensions: ['.ts', '.js', '.json']
    }
}
Run Code Online (Sandbox Code Playgroud)

从而最终给出Module not found错误。