美文网首页全栈前端Webpack4
webpack4入门3——打包模式选择

webpack4入门3——打包模式选择

作者: 前往悬崖下寻宝的神三算 | 来源:发表于2018-05-17 19:26 被阅读24次

    本文长期更新,如有错误,还请指正!
    关注一下不迷路 =.=

    什么是mode


    webpack4增加了mode配置项,这样会做一些默认的工作,一定程度上解决了webpacke配置复杂的弊端。

    语法

    mode:'development|production'
    

    不配置默认是production,这是2种模式都会做下工作

    //parent chunk中解决了的chunk会被删除
    optimization.removeAvailableModules:true
    //删除空的chunks
    optimization.removeEmptyChunks:true
    //合并重复的chunk
    optimization.mergeDuplicateChunks:true
    

    development


    开发模式,即在开发时使用此模式,主要做了以下工作(了解即可)

    1 . 默认配置以下插件

    //官方给的
    plugins: [
        new webpack.NamedModulesPlugin(),
        new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("development") }),
    ]
    

    2 . 其他配置(网上的)

    • 开启dev-tool,方便浏览器调试(不需要再配置devtool: 'inline-source-map')
    • 开启output.pathinfo,在产出的bundle中显示模块路径信息
    • 开启NamedModulesPlugin(热加载不需要再配)
    • 开启NoEmitOnErrorsPlugin
    • 提供详细的错误提示
    • 利用缓存机制,实现快速构建

    下面这个貌似更全些

    //调试
    devtool:eval
    //缓存模块, 避免在未更改时重建它们。
    cache:true
    //缓存已解决的依赖项, 避免重新解析它们。
    module.unsafeCache:true
    //在 bundle 中引入「所包含模块信息」的相关注释
    output.pathinfo:true
    //在可能的情况下确定每个模块的导出,被用于其他优化或代码生成。
    optimization.providedExports:true
    //找到chunk中共享的模块,取出来生成单独的chunk
    optimization.splitChunks:true
    //为 webpack 运行时代码创建单独的chunk
    optimization.runtimeChunk:true
    //编译错误时不写入到输出
    optimization.noEmitOnErrors:true
    //给模块有意义的名称代替ids
    optimization.namedModules:true
    //给模chunk有意义的名称代替ids
    optimization.namedChunks:true
    

    注:不知道做了什么,总之应该是方便开发

    production


    产品模式,即项目上线时用使用这个模式打包,主要做了以下工作(了解即可)

    1 . 默认配置以下插件(官方给的)

    plugins: [
        // 代码压缩
        new UglifyJsPlugin(/* ... */), //不需要再配置压缩
        new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("production") }),
        new webpack.optimize.ModuleConcatenationPlugin(),
        new webpack.NoEmitOnErrorsPlugin()
    ]
    

    2 . 其他配置(网上的)

    //性能相关配置
    performance:{hints:"error"....}
    //某些chunk的子chunk已一种方式被确定和标记,这些子chunks在加载更大的块时不必加载
    optimization.flagIncludedChunks:true
    //给经常使用的ids更短的值
    optimization.occurrenceOrder:true
    //确定每个模块下被使用的导出
    optimization.usedExports:true
    //识别package.json or rules sideEffects 标志
    optimization.sideEffects:true
    //尝试查找模块图中可以安全连接到单个模块中的段。- -
    optimization.concatenateModules:true
    //使用uglify-js压缩代码
    optimization.minimize:true
    

    使用命令行


    打包时也可以使用命令行改变模式

    webpack --mode=production
    

    相关文章

      网友评论

        本文标题:webpack4入门3——打包模式选择

        本文链接:https://www.haomeiwen.com/subject/zisidftx.html