前端加分项——vue项目优化打包

代码 代码 1329 人阅读 | 0 人回复

<
目录




1、路由懒减载

1. 为何需求路由懒减载

当刚运转项目的时分,发明刚进进页里,便将一切的js文件战css文件减载了出去,那一过程非常的耗损工夫。
假如翻开哪一个页里便对应的减载呼应页里的js文件战css文件,那末页里减载速率会年夜年夜汲引。
2. 怎样完成路由懒减载

vue民圆文档:路由懒减载
代码以下(示例):
  1. {
  2.     path: &#39;/login&#39;,
  3.     component: () => import(&#39;@/views/login/index&#39;),
  4.     hidden: true
  5.   },
复造代码
3. 路由懒减载中的邪术正文

经由过程正在正文中指定webpackChunkName,能够自定义那个文件的名字。
代码以下(示例):
  1. components = () => import(/* webpackChunkName:"login"*/ "../component/Login.vue")
复造代码
2、阐发包大小

1. 需供

念要明白挨包天生的文件中,每一个文件所占的空间大小。以便于我们阐发,对代码停止劣化处置。
2. 怎样天生挨包阐发文件

末端中运转 npm run preview -- --report, 那个号令会从我们的进口main.js停止依靠阐发,阐发出各个包的大小。终极会正在天生的dist文件夹下天生一个report.html的文件,翻开后就能够看到我们正在项目利用文件占有的空间大小啦~
(结果图以下:)
150447luvbga6655m6w6b5.jpg

3、webpack设置解除挨包

1. 需供

将一些没有经常使用的包,解除正在天生的挨包文件之外。
比方:上图所示的xsxl.js 、 element.js,能够将其解除正在挨包天生的文件之外
2. 解除挨包

找到 vue.config.js, 增加 externals 项,详细以下:
代码以下(示例):
  1. configureWebpack: {
  2.   // 设置单页使用法式的页里的题目
  3.   name: name,
  4.   externals: {
  5.      /**
  6.       * externals 工具属性剖析。
  7.       *  根本格局:
  8.       *     &#39;包名&#39; : &#39;正在项目中引进的名字&#39;
  9.       *  
  10.     */
  11.     &#39;vue&#39;: &#39;Vue&#39;,
  12.     &#39;element-ui&#39;: &#39;ElementUI&#39;,
  13.     &#39;xlsx&#39;: &#39;XLSX&#39;
  14.   },
  15.   resolve: {
  16.     alias: {
  17.       &#39;@&#39;: resolve(&#39;src&#39;)
  18.     }
  19.   }
  20. }
复造代码
4、 援用收集资本

1. 需供

我们停止了上一步操纵当前,挨包天生后的包小了很多。可是呢,出有那些依靠包的话,项目上线是出有法子运转的。那末便需求援用收集中的资本,去撑持我们代码的运转。
2. CDN



  • CDN齐称叫做“Content Delivery Network”,中文叫内乱容分收收集。我们用它去前进会见速率
  • 把一些静态资本:css, .js,图片,视频放正在第三圆的CDN效劳器上,能够放慢会见速率
长处:

  • 削减使用挨包出去的包体积
  • 放慢静态资本的会见
  • 操纵阅读器缓存,没有会变更的文件持久缓存
3. 完成步调

留意:正在开辟情况时,文件资本仍是能够从本地node_modules中掏出,而只要项目上线了,才需求来利用内部资本。此时我们可使用情况变量去停止辨别。详细以下:
代码以下(示例):
正在vue.config.js文件中:
  1. let externals = {}
  2. let cdn = { css: [], js: [] }
  3. const isProduction = process.env.NODE_ENV === &#39;production&#39; // 判定能否是消费情况
  4. if (isProduction) {
  5.   externals = {
  6.       /**
  7.       * externals 工具属性剖析:
  8.       * &#39;包名&#39; : &#39;正在项目中引进的名字&#39;
  9.     */
  10.       &#39;vue&#39;: &#39;Vue&#39;,
  11.       &#39;element-ui&#39;: &#39;ELEMENT&#39;,
  12.       &#39;xlsx&#39;: &#39;XLSX&#39;
  13.   }
  14.   cdn = {
  15.     css: [
  16.       &#39;https://unpkg.com/element-ui/lib/theme-chalk/index.css&#39; // element-ui css 款式表
  17.     ],
  18.     js: [
  19.       // vue must at first!
  20.       &#39;https://unpkg.com/vue@2.6.12/dist/vue.js&#39;, // vuejs
  21.       &#39;https://unpkg.com/element-ui/lib/index.js&#39;, // element-ui js
  22.       &#39;https://cdn.jsdelivr.net/npm/xlsx@0.16.6/dist/xlsx.full.min.js&#39;, // xlsx
  23.     ]
  24.   }
  25. }
复造代码
webpack设置externals设置项
  1. configureWebpack: {
  2.   // 设置单页使用法式的页里的题目
  3.   name: name,
  4.   externals: externals,
  5.   resolve: {
  6.     alias: {
  7.       &#39;@&#39;: resolve(&#39;src&#39;)
  8.     }
  9.   }
  10. }
复造代码
经由过程 html-webpack-plugin注进到 index.html当中:
正在vue.config.js文件中设置:
  1. chainWebpack(config) {
  2.   config.plugin(&#39;preload&#39;).tap(() => [
  3.     {
  4.       rel: &#39;preload&#39;,
  5.       fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
  6.       include: &#39;initial&#39;
  7.     }
  8.   ])
  9.   // 注进cdn变量 (挨包时会施行)
  10.   config.plugin(&#39;html&#39;).tap(args => {
  11.     args[0].cdn = cdn // 设置cdn给插件
  12.     return args
  13.   })
  14.   // 省略其他...
  15. }
复造代码
找到 public/index.html 经由过程设置CDN Config 顺次注进 css 战 js。
修正head的内乱容以下:
  1. <head>
  2.     <meta charset="utf-8">
  3.     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  4.     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  5.     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  6.     <title><%= webpackConfig.name %></title>
  7.       <!-- 引进款式 -->
  8.       <% for(var css of htmlWebpackPlugin.options.cdn.css) { %>
  9.         <link rel="stylesheet" href="<%=css%>">
  10.         <% } %>
  11.     <!-- 引进JS -->
  12.     <% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
  13.       <script src="<%=js%>"></script>
  14.     <% } %>
  15.   </head>
复造代码
5、 挨包来除console.log

1. 需供

正在项目挨包上线后,来撤消代码中一切的console.log
2. 代码演示

正在vue.config.js文件中设置:
代码以下(示例):
  1. chainWebpack(config) {
  2.     config.optimization.minimizer(&#39;terser&#39;).tap((args) => {
  3.       args[0].terserOptions.compress.drop_console = true
  4.       return args
  5.     })
  6. }
复造代码
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则