imengyu
imengyu
  • 发布:2022-02-26 16:47
  • 更新:2022-02-28 16:19
  • 阅读:1726

uniapp App NVUE 全局scss打包后样式都会打包到每个js中,导致文件过大,要如何解决?

分类:nvue

uniapp,App端,NVUE, 在App.vue中全局导入了base.scss, scss 里面是一些常用的公共样式和字体,本身不大。

<style lang="scss">  
    @import '@/cui/scss/base.scss';  
</style>

但是发现,打包后每个样式都会打包到js中,所有文件中都有一样的样式代码,一两个页面还好,上百个页面,增加的就是好几十MB了,上传下载都要浪费不少时间。

另外,猜测每次编译打包都耗时很长,是不是因为每个页面都需要编译一次这个东西?

能不能把这部分代码分离出来变成公共js?这样向我这个项目,至少可以减少10MB的大小。

2022-02-26 16:47 负责人:DCloud_UNI_FXY 分享
已邀请:
imengyu

imengyu (作者)

真的是让我大开眼界,除了样式,甚至写在js里面的任何静态数据,只要引用到了, 例如:
我在test1.js 中写了数据: const json = { ...... },这个js需要使用到这个数据。
而后在nvue页面中引用了test1.js,调用了test1.js中的一些方法,但是没有调用这个json数据,

发现:编译后居然会不管不顾把test1.js中的内容一股脑编译到所有的nvue js文件中?每个引用了这个test1.js的nvue页面js里面都有test1.js中的内容,相当于直接复制粘贴了。

那么请问,我分离出test1.js意义又何在呢?这样的结果就相当于我在每个页面里面都复制粘贴一份test1.js。

你们把它抽离分出一个单独的js有这么难吗?要用的时候再加载不可吗?为什么每个js文件都要单独打包一次?是你们的js引擎有问题还是咋的,不能加载多个js?

如下,三个页面里面有完全一模一样数据:

我的app有105个nvue页面,每个页面平均一下都增加了不必要的200kb大小,总共增加约20MB,白白增加了20MB!

Absorbed66c

Absorbed66c - 码农一枚

之前也发现了这个问题 页面量差不多的app 用全局样式和不用 大小相差几倍

DCloud_UNI_FXY

DCloud_UNI_FXY

  1. 全局css的问题后续会优化
  2. 每个nvue页面,为了保证运行性能,最终都会编译为一个独立的js文件来运行,不会再额外加载其他的,也就是如果你两个nvue页面引用了同一个js文件,那最终会包含两份相同js代码
  • imengyu (作者)

    非常感谢优化。希望HBulider可以给出一个编译选项之类的,引用相同的js时可选择 是嵌入每个js 或者 独立单独js 。这样可以让用户自由选择要性能还是要省空间。

    2022-02-28 17:15

  • 2***@qq.com

    所以优化了吗,2023年了还是这样呀

    2023-08-22 17:20

  • ipink

    全局css优化了吗, 2024年了还是这样子

    2023-08-30 17:05

jsnancy

jsnancy

啊这

该问题目前已经被锁定, 无法添加新回复