Webpack 无法解析打字稿文件。模块解析失败:意外的标记

Jac*_*opo 6 javascript typescript webpack

我正在我的一个旧项目上设置 Typescript 和 Webpack,突然遇到了这个错误:

您可能需要适当的加载程序来处理此文件类型,目前没有配置加载程序来处理此文件。请参阅https://webpack.js.org/concepts#loaders

然后我从头开始创建了一个新项目,如下所示:

webpack.config.js

const webpack = require('webpack');
const path = require('path');

module.exports = {
    mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
    entry: {
        main: './src/index.ts'
    },
    module: {
        rules: [
            {
                test: '/\.ts$',
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            '@babel/preset-env',
                            '@babel/preset-typescript'
                        ]
                    }
                },
                exclude: /node_modules/
            }
        ]
    },
    resolve: {
        extensions: ['.ts'],
    },
    plugins: [
        new webpack.CleanPlugin(),
    ],
    output: {
        filename: '[name].[contenthash].js',
        path: path.join(__dirname, 'dist')
    },

}
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
    "compilerOptions": {
        "baseUrl": "./",
        "rootDir": "src",
        "outDir": "dist",
        "lib": ["ES6", "DOM"],
        "target": "es5",
        "module": "es6",
        "noImplicitAny": true,
        "removeComments": true
    }
}
Run Code Online (Sandbox Code Playgroud)

src/index.ts(来自这里

class Greeter {
    greeting: string;

    constructor(message: string) {
        this.greeting = message;
    }

    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");
greeter.greet();
Run Code Online (Sandbox Code Playgroud)

...并且错误再次出现:/

./src/index.ts 2:12 中的错误 模块解析失败:意外的标记 (2:12) 您可能需要适当的加载器来处理此文件类型,当前没有配置加载器来处理此文件。请参阅https://webpack.js.org/concepts#loaders

我感觉我失去了一些东西,它可能是什么?

ps:我也尝试过不同的加载器 asts-loaderawesome-typescript-loader

谢谢!如有任何帮助,我们将不胜感激:*

Jef*_*ica 5

根本原因是您的 Typescript 规则不匹配(“当前没有配置加载器来处理此文件”),因此 Webpack 正在将您的 TS 文件作为 Javascript 读取,并在第:2 行第 12 行字符处被特定于 TypeScript 的抛出。你的webpack.config.js

test: '/\.ts$',
Run Code Online (Sandbox Code Playgroud)

这应该是一个正则表达式。请注意缺少单引号:

test: /\.ts$/,
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅 Webpack 文档Rule.testCondition