首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webpack,优化块给出了“冲突:多块发出资产到同一个文件名”错误。

Webpack,优化块给出了“冲突:多块发出资产到同一个文件名”错误。
EN

Stack Overflow用户
提问于 2021-03-03 08:43:17
回答 2查看 10.3K关注 0票数 8

信息

我试图生成我自己的webpack配置,并有一些问题,使它的工作。

问题

当试图使用优化将文件分割成块时,我会得到如下所示的错误:

错误:冲突:多个块向相同的文件名静态/js/bundle.js(块main和vendors-node_modules_react-hot-loader_patch_js-node_modules_react_jsx-dev-runtime_js-node_mod-4610d2) )发出资产

如果我删除优化部分,它可以工作,但没有分块。我已经查看了create应用程序webpack.config.js,以便在生成这个应用程序时获得一些参考。

如您所见,在开发和生产中都有优化部分处理分块。为什么我在使用它时会出现冲突错误?

精简/简化的配置版本(runtimeChunk禁用,因为它也会产生相同的冲突错误)

webpack.config.js

代码语言:javascript
复制
module.exports = () => {
    process.env.NODE_ENV = "development";
    process.env.BABEL_ENV = "development";

    return {
        mode: "development",
        entry: ["react-hot-loader/patch", "./src"],
        output: {
            path: undefined,
            publicPath: "/",
            filename: "static/js/bundle.js",
            chunkFilename: "static/js/[name].chunk.js",
        },
        optimization: {
            minimize: false,
            splitChunks: {
                chunks: "all",
                name: false
            },
            // runtimeChunk: {
            //     name: (entrypoint) => `runtime-${entrypoint.name}`,
            // },
        },
        resolve: {
            modules: [path.join(__dirname, "src"), "node_modules"],
            alias: {
                "react-dom": "@hot-loader/react-dom",
            },
        },
        module: {
            rules: [
                {
                    test: /\.(js|mjs|jsx|ts|tsx)$/,
                    include: path.resolve(__dirname, "./src"),
                    exclude: /node_modules/,
                    use: ["babel-loader"],
                },
            ],
        },
        plugins: [
            new HtmlWebpackPlugin({
                inject: true,
                template: path.resolve(__dirname, "./public/index.html"),
            }),
            new webpack.HotModuleReplacementPlugin(),
        ],
        devServer: {
            compress: true,
            hot: true,
            contentBase: "./build",
            historyApiFallback: true,
        },
        devtool: "inline-source-map",
    };
};

.babelrc

代码语言:javascript
复制
{"presets": [["react-app", {"runtime": "automatic"}]]}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-03 11:29:18

让它开始工作,必须将filename: "static/js/bundle.js"更改为filename: "static/js/[name].js"

代码语言:javascript
复制
output: {
    path: undefined,
    publicPath: "/",
    filename: "static/js/[name].js",
    chunkFilename: "static/js/[name].chunk.js",
}
票数 14
EN

Stack Overflow用户

发布于 2022-04-07 10:06:55

如果您正在处理一个弹出的创建,并且得到一个类似的错误

多个块将资产发送到相同的文件名静态/js/bundle.js(块main和运行时-main)

您只需将输出配置中的文件名属性更改为

代码语言:javascript
复制
filename: isEnvProduction
        ? 'static/js/[name].[contenthash:8].js'
        : isEnvDevelopment && 'static/js/bundle.js',

代码语言:javascript
复制
filename: isEnvProduction
        ? 'static/js/[name].[contenthash:8].js'
        : isEnvDevelopment && 'static/js/[name].js',

其中,[name]占位符为每个输出包指定了不同的名称,而不是固定的名称。

在我的例子中,它是由runtime-main.js文件引起的,我正在用runtimeChunk属性在optimization中生成该文件。

代码语言:javascript
复制
runtimeChunk: {
  name: entrypoint => `runtime-${entrypoint.name}`,
},
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66453511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档