1.修改source-map配置:此配置能大大减少打包后文件体积。

  a.首先修改 /config/index.js 文件:  

  1.   // /config/index.js
  2.   dev环境:devtool: 'eval'(最快速度)
  3.   prod环境:productionSourceMap: false(关闭source-map
  4.  
  5.   b.然后修改 /src/main.js 文件,关闭生产环境的调试信息
  6.   // /src/main.js
  7.   const isDebug_mode = process.env.NODE_ENV !== 'production'
  8.   Vue.config.debug = isDebug_mode
  9.   Vue.config.devtools = isDebug_mode
  10.   Vue.config.productionTip = isDebug_mode

  

2.启用happypack多核构建项目
 
  安装happypack后,修改 /build/webpack.base.conf.js 文件即可
  

  1.   npm install happypack --save-dev
  2.  
  3.   // /build/webpack.base.conf.js
  4.   const HappyPack = require('happypack')
  5.   const os = require('os')
  6.   const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
  7.   
  8.   // 增加HappyPack插件
  9.   plugins: [
  10.   new HappyPack({
  11.   id: 'happy-babel-js',
  12.   loaders: ['babel-loader?cacheDirectory=true'],
  13.   threadPool: happyThreadPool,
  14.   })
  15.   ]
  16.   // 修改引入loader
  17.   {
  18.   test: /\.js$/,
  19.   // loader: 'babel-loader',
  20.   loader: 'happypack/loader?id=happy-babel-js', // 增加新的HappyPack构建loader
  21.   include: [resolve('src'), resolve('test')]
  22.   }

  

 
3.启用DllPlugin和DllReferencePlugin预编译库文件
   
  这是最复杂也是提升效果最明显的一步,原理是将第三方库文件单独编译打包一次,以后的构建都不需要再编译打包第三方库
  
   a.增加 build/webpack.dll.config.js 文件,并在其中配置需要单独DLL化的模块
    

  1. const path = require("path")
  2. const webpack = require("webpack")
  3.  
  4. module.exports = {
  5. // 你想要打包的模块的数组
  6. entry: {
  7. vendor: ['vue/dist/vue.esm.js', 'axios', 'vue-router', 'iview']
  8. },
  9. output: {
  10. path: path.join(__dirname, '../static/js'), // 打包后文件输出的位置
  11. filename: '[name].dll.js',
  12. library: '[name]_library'
  13. },
  14. plugins: [
  15. new webpack.DllPlugin({
  16. path: path.join(__dirname, '.', '[name]-manifest.json'),
  17. name: '[name]_library',
  18. context: __dirname
  19. }),
  20. // 压缩打包的文件
  21. new webpack.optimize.UglifyJsPlugin({
  22. compress: {
  23. warnings: false
  24. }
  25. })
  26. ]
  27. }

 b. 在 build/webpack.dev.conf.js 和 build/webpack.prod.conf.js 增加如下插件

  1. new webpack.DllReferencePlugin({
  2. context: __dirname,
  3. manifest: require('./vendor-manifest.json')
  4. })

 c.在 /package.json 增加命令  

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

 d.在 /index.html 增加DLL化JS引入(必须首先引入)

  1. <script src="/static/js/vendor.dll.js"></script>

 e.执行构建

  1. npm run dll(这一步会生成build/vendor-manifest.jsonstatic/js/vendor.dll.js
  2. npm run dev npm run build

  

 4.通过 externals 配置来提取常用库,引用外链

    具体查看官方文档:https://webpack.docschina.org/configuration/externals/

vue-cli项目打包优化(webpack3.0)的更多相关文章

  1. 改造@vue/cli项目为服务端渲染-ServerSideRender

    VUE SEO方案二 - SSR服务端渲染 在上一章中,我们分享了预渲染的方案来解决SEO问题,个人还是很中意此方案的,既简单又能解决大部分问题.但是也有着一定的缺陷,所以我们继续来看下一个方案--服 ...

  2. vue cli 3 打包过大问题

    vue cli 3 打包命令 npm run build,这种情况下的打包可以通过设置 vue.config.js里面的 productionSourceMap: false. 如果是自己设置的打包环 ...

  3. vue+webpack+element-ui项目打包优化速度与app.js、vendor.js打包后文件过大

    从开通博客到现在也没写什么东西,最近几天一直在研究vue+webpack+element-ui项目打包速度优化,想把这几天的成果记录下来,可能对前端牛人来说我这技术比较菜,但还是希望给有需要的朋友提供 ...

  4. Vue Cli 3 打包上线 静态资源404问题解决方案

    报错原因:静态资源丢失 解决方案 官方文档https://cli.vuejs.org/zh/config/#vue-config-js baseUrl 从 Vue CLI 3.3 起已弃用,请使用pu ...

  5. vue大型项目高性能优化----想说爱你真的不容易

    一.背景   目前公司的电子合同采用表单设计器+合同业务配合实现,做了半年多后终于上线,但是下边员工普遍反映卡顿,甚至卡死,爆栈.尤其是新增和修改合同页面,因为这部分数据量大,逻辑复杂,很容易崩溃,所 ...

  6. 将vue的项目打包后通过百度的BAE发布到网上的流程

    经过两天的研究终于将VUE打包后的项目通过BAE发布到了网上.虽然接口方面还有一下问题但是自己还是很高兴的. 首先说一下这个项目需要用到的技术,vue+express+git+百度的应用引擎BAE. ...

  7. @vue/cli 3 打包文件读取绝对路径处理

    @vue/cli 3 封装了 webpack.config.js,一般都在 vue.config.js 里面配置,官网不推荐在 webpack 的 output 处理,这里踩了一下坑,希望可以帮到后面 ...

  8. vue+webpack项目打包后背景图片加载不出来问题解决

    在做VUE +的WebPack脚手架项目打包完成后,在IIS服务器上运行发现项目中的背景图片加载不出来检查项目代码发现是因为CSS文件中,背景图片引用的路径问题;后来通过修改配置文件,问题终于解决了, ...

  9. vue.js项目打包上线

    最近一直坚持每个月写一个小的vue.js 开发的项目,最后开发完成后想到很久之前给别人回答的一个问题:vue的项目如何上线,当时有千奇百怪的回答,我在想,这些人都是肿了么,vue的官方都说了,这个框架 ...

随机推荐

  1. PHP 类与对象 全解析( 一)

    目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 1.类与对象 对象:实际存在该类事物中每个实物的个体.$a =new User(); 实例化 ...

  2. ADO----nDSN

    //////////////链接数据库 非DSN模式/////////////////////////////    //CString strOpen="DSN=DBAddressBook ...

  3. AVPlayer 音乐播放后台播放,以及锁屏主题设置

    第一步:在appDelegate中通知app支持后台播放:在方法 - (BOOL)application:(UIApplication *)application didFinishLaunching ...

  4. Nginx面试

    声明:此文章非本人所 原创,是别人分享所得,如有知道原作者是谁可以联系本人,如有转载请加上此段话 1.请解释一下什么是 Nginx? Nginx是一个 web服务器和反向代理服务器,用于 HTTP.H ...

  5. java:Filter、Listener 自定义拦截器和过滤器应用

    一,Filter FilterEncoding 过滤器,统一设置servlet的编码格式. package com.dkt.filter; import java.io.IOException; im ...

  6. --num 与 num-- 的区别

    递增++和递减--操作符都属于一元操作符. 只能操作一个值的运算符是一元操作符,一元操作符是ECMscript中最简单的操作符. 递增.递减操作符介绍 递增.递减操作符有两个版本:前置型和后置型.顾名 ...

  7. JavaScript对象遍历属性和值

    原文链接:http://caibaojian.com/javascript-object-3.html 加入你输出来一个对象,但是苦于不知道里面有哪些属性和值,这个时候,你可以通过下面的代码来遍历这个 ...

  8. 浏览器根对象navigator之客户端检测

    Navigator的5个主要属性: appName:Web浏览器的名称 appVersion:浏览器的版本号和其他版本信息 userAgent:浏览器在它的USER-AGENT HTTP标题中发送的字 ...

  9. web 学习资源

    学习 https://skills.bugbank.cn/ https://github.com/JnuSimba/MiscSecNotes 靶场 http://skysec.top/2018/01/ ...

  10. Pig store用法举例

    store:将数据存储到HDFS等文件系统里   将数据保存到/data目录 store data into '/data'; 以逗号为分隔符 store data into '/data' usin ...