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

6

我正在为我的一个旧项目设置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')
    },

}

tsconfig.json

{
    "compilerOptions": {
        "baseUrl": "./",
        "rootDir": "src",
        "outDir": "dist",
        "lib": ["ES6", "DOM"],
        "target": "es5",
        "module": "es6",
        "noImplicitAny": true,
        "removeComments": true
    }
}

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();

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

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

我感觉缺少了些什么,是什么呢?

ps:我也尝试了不同的加载器,如ts-loaderawesome-typescript-loader

谢谢!任何帮助都将不胜感激 :*

1个回答

5
根本原因是你的Typescript规则没有匹配到("当前没有配置任何加载器来处理这个文件"),因此Webpack将你的TS文件读作Javascript,并在第2行的第12个字符处被TypeScript特定的:所干扰。从你的webpack.config.js文件来看:
test: '/\.ts$',

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

test: /\.ts$/,

请查看Webpack文档中的Rule.testCondition以获取更多信息。


我认为你的规则测试不需要在正则表达式中使用双反斜杠。test: /\.ts$/, 对我来说是正确的。 - Duane J
我认为你是正确的。修复中。 - Jeff Bowman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接