webpack性能优化(5)

上篇说到了happypack可以让webpack分成多个子进程去打包代码,然后再将结果返回给主进程,其实压缩代码的时候也可以使用多进程,这样也可以提高构建速度,而webpack-parallel-uglify-plugin就做到了这一点

const path=require('path');
const HtmlWebpackPlugin=require('html-webpack-plugin');
const HappyPack=require('happypack');
const ParallelUglifyPlugin=require('webpack-parallel-uglify-plugin');
module.exports={
    entry:'./main.js',
    output:{
        path:path.resolve(__dirname,'./dist'),
        filename:'bundle.js'
    },
    module:{
        rules:[{
            test:/\.css$/,
           use: ['happypack/loader?id=css']
        },
            {
                test:/\.js$/,
                use:['happypack/loader?id=babel'],
                exclude:path.resolve(__dirname,'node_modules')
               
            },
            {test:/\.jpg$/,
            loader:'url-loader',
            
            options:{limit:3*1034,callback:'file-loader'}
             },
              {test:/\.html$/,
              loader:'html-loader'}
           
    ]
    },

     devServer:{hot:true,
        host:'127.0.0.1',
        port:4000,
        open:true,
         compress:true,
         historyApiFallback:true
     },

    plugins:[new HtmlWebpackPlugin({template:'./index1.html'}),
            
            new HappyPack({id:'babel',loaders:['babel-loader?cacheDirectory']}),
            new HappyPack({id:'css',loaders:['style-loader','css-loader']}),
            new ParallelUglifyPlugin({
                uglifyJS:{output:{
                    beautify:false,    //最紧凑的输出
                    comments:false    //删除注释
                },
                compress:{
                    drop_console:true,    //删除所有输出语句
                    collapse_vars:true,    //内嵌已定义但只用到一次的变量
                    reduce_vars:true        //提取出出现多次但是没有定义成变量去引用的静态值
                }
            }
            })
           
],
    mode:'development'
}

使用ParallelUglifyPlugin实例化时还可以传几个参数

test:使用正则去匹配哪些文件需要被ParallerUglifyPlugin压缩,默认是/.js$/,也就是默认匹配所有js文件

include:作用和test一样,默认是为[]

exclude:匹配哪些文件不需要被ParallerUglifyPlugin压缩

cacheDir:缓存压缩的结果,下次遇到一样的压缩直接从缓存中取就可以了,默认是不开启,可以配置缓存的路径

workerCount:配置需要几个子进程去并发执行压缩,默认是当前cpu核数-1

sourceMap:是否生成映射文件

uglifyJs:用于压缩es5代码时配置,为object类型

uglifyEs:用于压缩es6代码时配置,为object类型

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack是一个现代化的前端打包工具,它可以将多个模块打包成一个或多个静态资源文件。在项目开发过程中,随着代码规模的增大,Webpack性能优化变得尤为重要。以下是一些Webpack性能优化的方法: 1. 减少打包文件体积: - 使用Tree Shaking:通过ES6模块的静态分析,去除未使用的代码,减少打包文件体积。 - 使用Code Splitting:将代码拆分成多个小块,按需加载,减少初始加载时间。 - 压缩代码:使用UglifyJS等工具对代码进行压缩,减小文件体积。 2. 加快构建速度: - 使用缓存:通过配置缓存选项,将构建过程中的中间结果缓存起来,加快下次构建速度。 - 多进程/多实例构建:使用工具如HappyPack或thread-loader,将任务分解到多个子进程或实例中并行处理,提高构建速度。 - 使用DllPlugin:将第三方库等不经常变动的模块提前打包成静态资源,减少每次构建的时间。 3. 优化文件加载: - 使用CDN:将静态资源部署到CDN上,加快文件加载速度。 - 使用缓存策略:配置合适的缓存策略,使浏览器能够缓存静态资源,减少重复加载。 - 按需加载:使用动态import或异步组件等方式,按需加载模块,减少初始加载时间。 4. 配置优化: - 减少不必要的插件和loader:只加载必要的插件和loader,减少构建过程中的处理时间。 - 使用resolve.alias:配置别名,减少模块查找时间。 - 使用externals:将一些不需要打包的模块通过externals配置引入,减小打包体积。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值