vue2项目实战打包优化(webpack)

一、打包后去掉console和警告(uglifyjs-webpack-plugin

优化方案:修改build文件夹中webpack.prod.conf.js的内容如下:

new UglifyJsPlugin({
  uglifyOptions: {
    compress: {
       unused:true,  //是否去掉未关联的函数和变量
       warnings: true,   //是否去掉告警
       drop_debugger:true,   //自动删除debugger
       drop_console:true,  //自动删除console.log
       pure_funcs:['consoe.log'],
     }
  },
  sourceMap: config.build.productionSourceMap,    //将错误信息为映射到模块
  parallel: true   //多通道并处理
}),

二、让css文件和单文件打包在一起(extract-text-webpack-plugin)

优化方案:在 webpack.prod.conf.js 里面修改内容如下:

//css打包优化;不让css全部打包在一起
new ExtractTextPlugin({
   filename: utils.assetsPath('css/[name].[contenthash].css'),
   allChunks: false,    
}),

三、自动处理css前缀(postcss-loader autoprefixer)

优化方案:在weback配置postcss-loader模块

1、npm i postcss-loader autoprefixer --save-dev

2、在根目录新建一个postcss.config.js文件

module.exports = {
    plugins: [
        require('autoprefixer')
    ]
}

3、在webpack.config.js中处理css的配置文件中添加postcss-loader,如下所示

{
    test:/\.css$/,
    use:extractTextPlugin.extract({
        fallback:"style-loader",
        use:[
            {loader:"css-loader",options:{importLoader:1}},
            "postcss-loader"
        ]
    })
}

四、消除未使用的CSS(PurifyCSS-webpack)

优化方案:

1、安装插件:npm install purifycss-webpack purify-css --save-dev

2、引入glob,因为我们需要同步检查html模板,所以我们需要引入node的glob对象使用。

3、在webpack.config.js/ webpack.prod.conf.js 文件头部引入glob、引入purifycss-webpack

const glob = require('glob');
const PurifyCssWebpack  = require('purifycss-webpack');

4、引入完成后我们需要在webpack.config.js里配置plugins。代码如下

new PurifyCssWebpack({
    paths:glob.sync(path.join(__dirname,'src/*.html'))   //src下所有的html
})

注意:使用这个插件必须配合extract-text-webpack-plugin这个插件

五、代码压缩工具(ParallelUglifyPlugin

这个插件可以帮助有很多入口点的项目加快构建速度。把对JS文件的串行压缩变为开启多个子进程并行进行uglify

优化方案:

1、安装插件  npm install webpack-parallel-uglify-plugin --save-dev

2、在webpack.config.js/ webpack.prod.conf.js 里配置plugins。

plugins: [
   new ParallelUglifyPlugin({
     workerCount: 4,
     uglifyJS: {
       output: {
         beautify: false, // 不需要格式化
         comments: false // 保留注释
       },
       compress: { // 压缩
         warnings: false, // 删除无用代码时不输出警告
         drop_console: true, // 删除console语句
         collapse_vars: true, // 内嵌定义了但是只有用到一次的变量
         reduce_vars: true // 提取出出现多次但是没有定义成变量去引用的静态值
       }
     }
   });
] 

注意:webpack-parallel-uglify-plugin 插件相对 UglifyJsPlugin 打出的包略大(但是不明显);这里的提速和增加的体积相比,我选择了追求速度

六、DLL(DllPlugin、DllReferencePlugin)

            打包dll的时候,Webpack会将所有包含的库做一个索引,写在一个manifest文件中,而引用dll的代码(dll user)在打包的时候,只需要读取这个manifest文件,就可以了

1、在项目build文件夹下新增文件webpack.dll.conf.js,内容如下

var path = require('path');
var webpack = require('webpack');
module.exports = {
  entry: {
      vendor: [ // 这里填写需要的依赖库
           'babel-polyfill',
           'axios',
           'vue/dist/vue.common.js',
           'vue-router',
           'pingpp-js',
           "region-picker",
           'jquery',
           'moment',
           ''
      ]
  },
  output: {
      path: path.resolve(__dirname, '../static/js'),
      filename: '[name].dll.js',  
      library: '[name]_library'
  },
  module: {
      rules: [
           {   test: /\.vue$/,   loader: 'vue-loader'   },
           {   test: /\.js$/,   loader: 'babel-loader',   exclude: /node_modules/   }
      ]
  },
  plugins: [
      new webpack.optimize.ModuleConcatenationPlugin(),
      new webpack.DllPlugin({
           path: path.join(__dirname, '.', '[name]-manifest.json'),
           libraryTarget: 'commonjs2',   name: '[name]_library'  }),
           new webpack.optimize.UglifyJsPlugin({
               compress: {
                       warnings: false 
               }
           })
  ] 
} 

2、在webpack.prod.conf.js文件里插件部分添加

plugins: [
   new webpack.DllReferencePlugin({
     context: path.resolve(__dirname, '..'),
     manifest: require("./build/bundle.manifest.json"),
   })
] 

3、在项目根目录index.html文件中添加:

<body> 
  <div id="app"></div> 
  <!-- built files will be auto injected -->
  <script src="<%= webpackConfig.output.publicPath %>spa/js/vendor.dll.js"></script>   //添加这句,路径可根据所需修改 
</body>

4、在package.json里打包dll添加命令

"build:dll": "webpack --config build/webpack.dll.conf.js" 

5、执行命令

npm run build:dll //打包一次之后依赖库无变动不需要执行
npm run build 

七、设置 babel 的 cacheDirectory 为true

优化方案:在webpack.base.conf.js中修改babel-loader

loader: 'babel-loader?cacheDirectory=true',

八、热加载

new webpack.HotModuleReplacementPlugin() //热加载

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一个流行的 JavaScript 框架,而 webpack 是一个现代化的模块打包工具。结合使用 Vue.js 和 webpack 可以帮助我们构建复杂的前端应用程序。 在 Vue.js + webpack 实战中,你可以完成以下任务: 1. 创建一个基本的 Vue.js 项目:首先,你需要安装 Node.js 和 npm,然后使用命令行工具创建一个新的 Vue.js 项目。 2. 配置 webpack:在项目根目录下,你需要创建一个 webpack 配置文件(通常是 webpack.config.js),并定义入口文件、输出文件、加载器和插件等。 3. 使用 webpack 加载 Vue 组件:使用 vue-loader 加载 Vue 单文件组件 (SFC),这样可以将组件的模板、样式和 JavaScript 代码集中在一个文件中。 4. 使用 webpack 打包和压缩:通过运行 webpack 命令,可以将所有的 Vue 组件和其他 JavaScript 文件打包成一个或多个最终的输出文件。你还可以使用压缩插件来减小文件体积。 5. 开发和调试:在开发过程中,你可以使用 webpack-dev-server 来启动一个本地开发服务器,并自动刷新页面。还可以使用 source maps 来调试打包后的代码。 6. 部署到生产环境:在准备部署时,你可以使用 webpack 的生产模式配置来优化打包结果。这包括压缩代码、分离 CSS、懒加载等等。 以上是 Vue.js + webpack 实战的一些基本步骤。当然,实际项目中还会涉及更多的配置和功能,例如代码分割、静态资源管理、自动化构建等等。你可以根据自己的项目需求进行深入学习和实践。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值