首页 > 其他分享 >如何降低Vue.js项目中Webpack打包文件的大小?

如何降低Vue.js项目中Webpack打包文件的大小?

时间:2023-06-16 10:32:59浏览次数:37  
标签:shop vue -- js Webpack Vue build main


结论

结论:vue中,直接引用文件,可以让打包文件最小。

试验记录

下面测试项目中引入一个Button组件的代价。

基准工程大小:

[raywill:shop]npm run build

> shop@ build /Users/raywill/code/vue/shop
> cross-env NODE_ENV=production webpack --progress --hide-modules

Hash: d902d9dc5e1698eaa9ea
Version: webpack 1.12.14
Time: 6584ms
       Asset     Size  Chunks             Chunk Names
    build.js  80.7 kB       0  [emitted]  main
build.js.map   690 kB       0  [emitted]  main

通过引入组件的方式

import {Button} from 'vue-weui'

增加了21.3K的大小

[raywill:shop]npm run build

> shop@ build /Users/raywill/code/vue/shop
> cross-env NODE_ENV=production webpack --progress --hide-modules

Hash: f694bcd5ed5727442173
Version: webpack 1.12.14
Time: 8039ms
       Asset    Size  Chunks             Chunk Names
    build.js  102 kB       0  [emitted]  main
build.js.map  890 kB       0  [emitted]  main

直接引用button.vue文件

import Button from 'vue-weui/components/button/button.vue';

文件大小只增加了0.8KB

[raywill:shop]npm run build

> shop@ build /Users/raywill/code/vue/shop
> cross-env NODE_ENV=production webpack --progress --hide-modules

Hash: 319a98bac47333236f71
Version: webpack 1.12.14
Time: 6778ms
       Asset     Size  Chunks             Chunk Names
    build.js  81.5 kB       0  [emitted]  main
build.js.map   695 kB       0  [emitted]  main

由此可见,为了最大程度降低打包文件的大小,目前最好的方式还是手工引入对应的组件文件。

可别小看这种差异,对于较大的库,采取两种方式的差别是很大的,例如vux库,二者大小可相差400KB:

// 引用部分组件
import {Circle} from 'vux';
[raywill:shop]npm run build

> shop@ build /Users/raywill/code/vue/shop
> cross-env NODE_ENV=production webpack --progress --hide-modules

Hash: 8770eef20f62e11410ac
Version: webpack 1.12.14
Time: 53821ms
       Asset     Size  Chunks             Chunk Names
    build.js   480 kB       0  [emitted]  main
build.js.map  1.97 MB       0  [emitted]  main
// 只引用需要的文件
import Circle from 'vux/components/circle/'
[raywill:shop]npm run build

> shop@ build /Users/raywill/code/vue/shop
> cross-env NODE_ENV=production webpack --progress --hide-modules

Hash: 926fd28e8edd00ddae53
Version: webpack 1.12.14
Time: 6652ms
       Asset     Size  Chunks             Chunk Names
    build.js  82.4 kB       0  [emitted]  main
build.js.map   696 kB       0  [emitted]  main

参考资料

参考资料 里面有明确的注释:

// 引用部分组件
import {Dialog} from 'vue-weui';
// 或
// 只引用需要的文件,减少文件大小
import Dialog from 'vue-weui/components/dialog/dialog.vue';

export default {
  components: {
    Dialog
  }
};

课后思考题

引用部分组件,比只引用需要的文件,多做了哪些事,导致文件变大?

思考题答案

通过分别用两种写法编译,探究到了问题的根源:

如何降低Vue.js项目中Webpack打包文件的大小?_ide

上图中,左边为引用需要的文件,右边为引用部分组件。引用部分组件,背后实际上是引用了整个组件库,然后只把库中的一部分暴露给用户。

下面通过文件大小,进一步证实了这一观察:

422169  node_modules/vux/vux.js
 280020  fi.js  // 单独文件方式
 700310  md.js  // 子模块方式

 vux.js + fi.js ~= md.js

那么,有没有智能的方式,自动去掉不需要的文件引用呢?应该有,不过可以猜想到,不会有特别大的改善。如果你有好办法,请留言。


UPDATE(2016/04/21):

谢谢Lxxyx的留言。

下一代打包工具Rollup和Webpack2支持该功能,详细参考:https://ouvens.github.io/frontend-build/2016/01/20/next-generation-js-module-bunlder.html


标签:shop,vue,--,js,Webpack,Vue,build,main
From: https://blog.51cto.com/u_16162111/6498030

相关文章

  • vue在线预览pdf、word、xls、ppt等office文件
    perview(row){consttypeArr=['doc','docx','ppt','pptx','xls','xlsx']letarr=row.url.split('.')letfileType=arr[arr.length-1]leturl=''......
  • vue-element-admin 上传图片慢问题处理
    vue-element-admin自带上传图片组件,在使用的过程中发现上传速度很慢,尤其是上传一些大图需要耗时几十秒不能忍受。出现这种情况,是因为upload组件会将图片上传到action="https://httpbin.org/post" ,并返回转换成base64编码格式的数据。格式类似:data:image/jpeg;base64,/9j/4AAQS......
  • 3d翻转动画 vue3 ts
    <template><section><divclass="flip-container"><divclass="cards":class="{flipped:isFlipped}"><divclass="front"></div><......
  • vue之computed
    对Vuecomputed的理解一、什么是computedVue的computed属性是一种计算属性,它的值是根据其他属性计算而来的。Vue会自动追踪computed属性所依赖的属性,并在这些属性发生变化时重新计算computed属性的值。computed属性的实现原理是使用了Vue的响应式系统。当一个computed属性被访......
  • vue的自定义指令
    自定义指令 含义vue官方提供了v-text,v-bind,v-for,v-model,v-if等常用指令,除此之外vue还允许开发者自定义指令。自定义指令分为两类:私有自定义指令全局自定义指令注意事项自定义指令使用时需要添加v-前缀指令名如果是多个单词,要使用kebab-case短横线命......
  • JS01
    如何写一段JS代码并运行写在行内<!--html--><inputtype="button"value="按钮"onclick="alert('HelloWorld');"/>写在script标签中<!--html--><head><script>alert('HelloWorld');......
  • Vue项目入门实战(07)-想让你的Vue页面更炫酷?来学习样式绑定吧
    1class的对象绑定1.1需求现在要实现点击div区域里的helloworld文本时,文本变成红色。1.2实现<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Vue中的样式绑定</title><scriptsrc="../vue.js&q......
  • .js .jsx .ts .tsx的区别
    .js是javascript文件的扩展名,例如main.js。.jsx是javascript文件并表明使用了JSX语法。.ts是typescript文件的扩展名.tsx表明是typescript文件并使用了JSX语法。https://zhuanlan.zhihu.com/p/435385184......
  • 【JS基础】Promise.resolve()
    Promise.resolve 静态方法将给定值“解析”为Promise。 如果值是Promise,则返回该Promise;如果值是thenable,返回的Promise会“跟随”这个thanable的对象,采用它的最终状态;否则,返回的promise将以此值完成。此函数将类promise对象的多层嵌套展平。 注意:不要在解析......
  • Vue3 —— 商城项目
    create-vuecreate-vue是Vue官方新的脚手架工具,底层切换到了vite(下一代前端工具链),为开发提供极速响应。执行如下命令,这一指令将会安装并执行create-vuenpminitvue@latest无论您之前是否安装过create-vue,执行npminitvue@latest命令都会创建一个新的Vue项目。这个命令会......