You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Webpack+React+Babel构建报错:Cannot use 'import.meta' outside a module

解决"Uncaught SyntaxError: Cannot use 'import.meta' outside a module"错误

问题根源

你的Webpack配置中启用了ES模块输出(experiments.outputModule: true和output.module: true),但HtmlWebpackPlugin默认生成的<script>标签没有添加type="module"属性,浏览器会把输出的ES模块当成普通脚本执行,从而触发import.meta相关的语法错误。

解决方案

方案1:关闭ES模块输出(适合不需要ES模块的场景)

修改webpack.config.js,移除ES模块相关配置:

module.exports = function (env) {
    // ... 其他代码
    return {
        mode: MODE,
        entry: paths.entry,
        // 移除ES模块实验配置
        // experiments: {
        //     outputModule: true,
        // },
        output: {
            filename: "[name].[contenthash].js",
            path: paths.build,
            clean: true,
            // 移除module输出设置
            // module: true
        },
        // ... 其他代码
    };
};

方案2:保留ES模块输出,给脚本添加type="module"

修改HtmlWebpackPlugin的配置,添加scriptLoading: 'module'选项,让生成的script标签支持ES模块:

plugins: [
    new HtmlWebpackPlugin({
        template: paths.html,
        // 添加script加载类型配置
        scriptLoading: 'module'
    }),
    new webpack.ProgressPlugin()
],

额外检查

确保Babel配置不干扰Webpack的模块处理,可在babel-loader选项中明确设置@babel/preset-env的modules为false(Webpack 5会自行处理模块语法,无需Babel转换):

use: {
    loader: 'babel-loader',
    options: {
        presets: [
            ["@babel/env", { modules: false }],
            "@babel/react"
        ],
    }
},

内容的提问来源于stack exchange,提问作者DIVAYTH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:58:15