webpack4.0配置记录(2)

接上一篇webpack4.0配置记录(1),继续记录学习webpack配置。vue

定义环境变量

new Webpack.DefinePlugin({//用来定义全局环境变量
    DEV:JSON.stringify('dev'),
    FLAG:'true'
}),

webpack简单优化

  1. noParse
module:{
    noParse:'/jquery/',//不去解析设置的包所依赖的关系,如jquery
}
  1. ignorePlugin
module:{
    noParse:'/jquery/',//不去解析设置的包所依赖的关系
    rules:[
        {
            test:/\.js$/,
            exclude:/node_modules/,
            include:path.resolve('src'),
            use:{
                loader:'babel-loader',
                options:{
                    presets:[
                        '@babel/preset-env',
                        '@babel/preset-react'
                    ]
                }
            }
        }
    ]
}

经过exclude排除和include包含某些模块
另外也可使用webpack自带的ignorePlugin插件排除某些包,减小体积。node

new webpack.IgnorePlugin(/\.\/locale/,/moment/),

以上配置忽略了时间格式化moment.js中的语言包react

  1. happypack多线程打包
let Happypack=require('happypack')
...
module.exports={
    module:{
        noParse:'/jquery/',//不去解析设置的包所依赖的关系
        rules:[
            {
                test:/\.js$/,
                exclude:/node_modules/,
                include:path.resolve('src'),
                use:'Happypack/loader?id=js'
                // use:{
                //     loader:'babel-loader',
                //     options:{
                //         presets:[
                //             '@babel/preset-env',
                //             '@babel/preset-react'
                //         ]
                //     }
                // }
            }
        ]
    },
    plugins:[
        new Happypack({
            id:'js',
            use:[
                {
                    loader:'babel-loader',
                    options:{
                        presets:[
                            '@babel/preset-env',
                            '@babel/preset-react'
                        ]
                    }
                }
            ]
        })
    ]
}
  1. webpack内置功能

(1)tree-shaking
(2)scope-hosting
这两项优化只在生产环境下有效jquery

  1. 抽离公共代码
module.exports={
    optimization:{
        splitChunks:{//分割代码块
            cacheGroups:{//缓冲组
                common:{
                    chunks:'initial',
                    minSize:0,//抽离模块最小粒度是0
                    minChunks:2//表示代码块用过2次以上就要抽离
                },
                vendor:{
                    priority:1,//至关于权重,先抽离第三方模块,若是不设置该属性,分割代码块将从上到下,没法抽离第三方模块。
                    test:/node_modules/,
                    chunks:'initial',
                    minSize:0,//抽离模块最小是0
                    minChunks:2//表示用过2次以上就要抽离
                }
            }
        }
    },
}
  1. 文件热更新
devServer:{
    hot:true
},
plugins:[
    new webpack.NamedModulesPlugin(),//打印更新的模块路径
    new webpack.HotModuleReplacementPlugin()//热更新
]

7.可使用dllPlugin动态连接库优化
DllPlugin 和 DllReferencePlugin提供了以大幅度提升构建时间性能的方式拆分软件包的方法。原理是将特定的第三方NPM包模块提早构建,而后经过页面引入。这不只可以使得vendor文件能够大幅度减少,同时,也极大的提升了构件速度。网上别的大神有一篇文章写的很详细,能够参考,传送门webpack

以上就是一些本身在学习webpack4.0配置过程当中的一些学习记录,写出来和你们分享,若是有错误,还望告知。我的博客同步更新,欢迎关注交流!不要忘了点个赞,谢谢!git

相关文章
相关标签/搜索