• webpack 中,filename 和 chunkFilename 的区别


    filename

    filename 是一个很常见的配置,就是对应于 entry 里面的输入文件,经过webpack打包后输出文件的文件名。比如说经过下面的配置,生成出来的文件名为 index.min.js
    请添加图片描述

    chunkFilename

    chunkFilename 指未被列在 entry 中,却又需要被打包出来的 chunk 文件的名称。一般来说,这个 chunk 文件指的就是要懒加载的代码。

    比如说我们业务代码中写了一份懒加载 lodash 的代码:

    // 文件:index.js
    
    // 创建一个 button
    let btn = document.createElement("button");
    btn.innerHTML = "click me";
    document.body.appendChild(btn);
    
    // 异步加载代码
    async function getAsyncComponent() {
        var element = document.createElement('div');
        const { default: _ } = await import('lodash');
    
        element.innerHTML = _.join(['Hello!', 'dynamic', 'imports', 'async'], ' ');
    
        return element;
    }
    
    // 点击 button 时,懒加载 lodash,在网页上显示 Hello! dynamic imports async
    btn.addEventListener('click', () => {
        getAsyncComponent().then(component => {
            document.body.appendChild(component);
        })
    })
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    我们的 webpack 不做任何配置,还是原来的配置代码:

    {
        entry: {
            index: "../src/index.js"
        },
        output: {
            filename: "[name].min.js", // index.min.js
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这时候的打包结果如下:

    请添加图片描述
    这个 1.min.js 就是异步加载的 chunk 文件。文档里这么解释:

    output.chunkFilename 默认使用 [id].js 或从 output.filename 中推断出的值([name] 会被预先替换为 [id][id].

    文档写的太抽象,我们不如结合上面的例子来看:
    output.filename 的输出文件名是 [name].min.js[name] 根据 entry 的配置推断为 index,所以输出为 index.min.js

    由于 output.chunkFilename 没有显示指定,就会把 [name] 替换为 chunk 文件的 id 号,这里文件的 id 号是 1,所以文件名就是 1.min.js

    如果我们显式配置 chunkFilename,就会按配置的名字生成文件:

    {
        entry: {
            index: "../src/index.js"
        },
        output: {
            filename: "[name].min.js",  // index.min.js
            chunkFilename: 'bundle.js', // bundle.js
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    请添加图片描述

    总结

    filename 指列在 entry 中,打包后输出的文件的名称。

    chunkFilename 指未列在 entry 中,却又需要被打包出来的文件的名称。

  • 相关阅读:
    【ArcGIS微课1000例】0030:ArcGIS利用MXD doctor工具分析并修复mxd地图文档
    Vue+ElementUI—环境搭建
    Microsoft VBA Excel 提取相同名称的整列数据
    Transformer详解
    Java内存区域
    音频转文字有什么方法?怎么将音频转文字?
    高校邮箱账号盗用监控及钓鱼邮件检测-上海交通大学
    DOM的增删改
    深入了解苹果证书及其分类,提升iOS应用开发效率
    中国制库:创新引领,效率突破,塑造行业新标准
  • 原文地址:https://blog.csdn.net/u013565133/article/details/134479280