视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Vue项目总结之webpack常规打包优化方案
2020-11-27 21:55:29 责编:小采
文档


由于新建项目发版打包时间大概需要 30分钟 ,发版时 严重 拖慢 下班 时间,所以特意查看了相关文档来优化打包速度,争取早点下班,^_^。

分析打包文件

要优化,先分析。我们先要知道到底是哪里拖慢我们的打包速度呢?

打包后生成文件分析

可以利用 webpack-bundle-analyzer 插件来分析我们打包后生成的文件

安装

npm i webpack-bundle-analyzer -D

使用

修改 webpack.prod.conf.js 文件

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

// 构建完成后,浏览器会自动打开localhost:8080
webpackConfig.plugins.push(
 new BundleAnalyzerPlugin({
 analyzerPort: 8080,
 generateStatsFile: false
 })
)

通过图片可以看到打包后文件的具体信息

打包进度条显示,可以查看到打包进度百分比

simple-progress-webpack-plugin 可以显示打包百分比

安装

npm i simple-progress-webpack-plugin -D

使用

修改 webpack.prod.conf.js 文件

const SimpleProgressWebpackPlugin = require( 'simple-progress-webpack-plugin' )
...
 plugins: [
 new SimpleProgressWebpackPlugin()
 ]
...

效果如下:

 

资源与依赖包的控制

通过上面进度可以看到,打包过程中,卡顿在压缩的地方过长,当项目越来越臃肿的时候,我们要需要对项目静态资源以及依赖包进行整理,

图片过大的可以压缩,这里推荐一个还不错的压缩 链接

  • 项目中没有使用的依赖可以删除,可以按需引用的依赖,按需引用
  • 项目里面使用 ElementUI 和 Echarts 都是全部引用挂在 Vue.prototype 上,现都改为按需引用。
  • 减少文件搜索范围

    设置 resolve.alias 字段,避免打包时如果使用相对路径访问或着 import 文件时会层层去查找解析文件

    resolve: {
     alias: {
     '@': resolve('src')
     }
    }

    合理配置 extensions 扩展名

    resolve.extensions 能够自动解析确定的扩展,但是如果 extensions 扩展名过多,会导致解析过程过多,所以我们要合理配置扩展名,不要过多配置扩展名,项目引用多的文件,扩展名放在前面,我司项目中多的是 vue , js 文件,可以只引用这两种。

    resolve: {
     extensions: ['.vue', '.js']
    }

    loader 预处理文件增加 include 匹配特定条件

    预处理各种文件时指定匹配目录后, webpack 解析文件时就不会循环查找其他目录,加快解析速度。

    happypack 多线程执行

    webpack 执行预处理文件时单线程的,我们可以使用 happypack 来多线程处理文件。

    安装

    npm i happypack  -D

    使用

    修改 webpack.base.js 文件

    const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });
    module: {
     rules: [
     {
     test: /\.js$/,
     loader: 'happypack/loader?id=babel', // 原始loader替换成`happypack/loader`
     include: [resolve('src')]
     }
     ]
    },
    plugins: [
     new HappyPack({
     // id标识 需要处理的loader
     id: 'babel',
     // loader配置和原始配置一样
     loaders: [
     {
     loader: 'babel-loader',
     options: {
     presets: ['es2015'],
     cacheDirectory: true
     }
     }
     ],
     threadPool: happyThreadPool
     })
    ]

    babel-plugin-dynamic-import-node 异步加载

    babel-plugin-dynamic-import-node 插件是使 import() 替换成 require 编译

    安装

    npm i babel-plugin-dynamic-import-node -D

    使用

    修改 .babelrc 文件

    "env": {
     "development": {
     "plugins": ["dynamic-import-node"]
     },
     "production": {
     "plugins": ["dynamic-import-node"]
     }
    }

    注意:使用插件 build 后没有 chunk files 文件。

    总结

    项目经过以上优化,打包从 30 分钟,到 2 分钟,整体还有优化空间,可以使用其他 cdn , dll 等优化方式。

    以上所述是小编给大家介绍的Vue项目总结之webpack常规打包优化方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    下载本文
    显示全文
    专题