

亲身体验了一把vite,感觉真的没有说的那么好,很多坑
source link: https://segmentfault.com/a/1190000041057203
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

亲身体验了一把vite,感觉真的没有说的那么好,很多坑
1、有话要说
本来项目中用的是webpack,我想着把项目构建成vite,就可以提升工作效率,但是谁知。各种各样的坑,所以我觉得还是简单的写下来
2、require
众所周知require是webpack中的语法。
如果你想动态请求一个静态资源路径,你可以这样
computed: { getUrl() { return require("@/assets/images/" + this.src); } }
但是在vite中,不是,它不识别require,而是要使用 new URL()
在项目中坑的是new URL中竟然不只是@别名符,你只能用相对路径
computed: { getUrl() { return new URL(`../../assets/images/${this.src}`, import.meta.url).href; } },
因为一旦使用 @方式,在开发时正常,那么你编译后,就会报错。根本找不到路径。
2、process
process也用不了,
比如你项目中用了process.env.NODE_ENV
那么只能替换为import.meta.env.MODE
3、webpack.ProvidePlugin
vite中不支持webpack中提前注入的方式。
比如你项目中很多地方都要用
import moment from 'moment'; import _ from 'lodash'; import mathjs from 'mathjs'; import jquery from 'jquery';
你要在每个用到的组件中,都要引入。很烦很烦。
所以webpack就提供了一个插件ProvidePlugin,可以让你提前就一次性注入,之后在页面中直接使用,无需再引入
然而,然而,这么重要的功能,vite竟然不支持。
4、webpackChunkName
无法在路由中通过webpackChunkName进行代码分割。
导致在路由中引入的组件,编译后,会全部散落在static下的js文件夹下。很多很多。
5、启动很慢
我看到这里,以为页面已经秒开了。但是打开页面才发现。一致loading中,没有任何反应
回过头再看控制台
竟然是慢悠悠的加载依赖。
此时我发现,我的node_modules下多出来了一个.vite文件夹
打开一看,吓我一跳。多出来了这么多文件夹
前几个大于1000k的文件,合起来有30M大。而整个.vite文件夹,足足有40M
然后,进去页面,打开浏览器 network
算了,不截图了,太多了,
269个请求。。。。。。。。。
当我登录之后,切换路由,它又去加载了172个请求。这几乎是webpack的4倍多
而webpack才19次,因为我通过webpackChunkName将这个路由的文件全放到chunk-dataSource.js这一个文件中了
这是我vite.config.js配置
build: { target: 'modules', outDir: resolve(__dirname, `dist/${entryPath}`), //相对于root而言 assetsDir: 'assets', //相对于build.outDir而言 assetsInlineLimit: 4096, cssCodeSplit: true, minify: 'esbuild', sourcemap: false, rollupOptions: { input: { index: resolve(__dirname, 'index.html'), }, output: { chunkFileNames: 'static/js/[name]-[hash].js', entryFileNames: 'static/js/[name].js', assetFileNames: 'static/[ext]/[name]-[hash].[ext]', }, }, // chunk 大小警告的限制 chunkSizeWarningLimit: 500, },
由于我使用到了中国地图,所以把geoJSON放到本地了,结果它直接报错。编译不通过。
提示内存溢出。
费了我好大劲才找出来是geoJSON导致的问题。
其次是代码分割。
css散落一地
js也散落一地
本想通过rollup自带的manualChunks来手动分割
build: { target: 'modules', outDir: resolve(__dirname, `dist/${entryPath}`), //相对于root而言 assetsDir: 'assets', //相对于build.outDir而言 assetsInlineLimit: 4096, cssCodeSplit: true, minify: 'esbuild', sourcemap: false, rollupOptions: { input: { index: resolve(__dirname, 'index.html'), }, output: { chunkFileNames: 'static/js/[name]-[hash].js', //chunkFileNames会采用rollup内部自动分割,可以使用manualChunks明确指定分割。 entryFileNames: 'static/js/[name].js', assetFileNames: 'static/[ext]/[name]-[hash].[ext]', manualChunks(id, { getModuleInfo }) { if (id.includes('node_modules')) { return 'vendor'; //代码分割为第三方包 } if (id.includes('views/pre-login')) { return 'pre-login'; //代码分割为数据源 } if (id.includes('views/home')) { return 'home'; //代码分割为数据源 } if (id.includes('views/settings')) { return 'settings'; //代码分割为数据源 } }, }, }, // chunk 大小警告的限制 chunkSizeWarningLimit: 500, },
没承想,编译完后,用vite preview预上线去预览页面,报错了
我开发环境好好地,一编译,M is not a function
这还怎么玩,啥也不是,老老实实换回webpack吧
Recommend
-
128
去年,当OPPO、vivo以黑马般的姿态登上国产手机销量排行榜TOP3时,许多人才恍然大悟:原来这些被忽略许久的线下品牌竟活得这么好!许多人都有这样的疑问:OV、金立等线下品牌究竟怎么做到的?如果你有机会到一个五六线城市看一看,相信你一定可以找到答案。
-
95
宽带症候群 - @kexihai - 结论:必须要有优秀的设备基础!大部分人不需要 500M 光纤。大家好,我是一名中国电信的老客户,有幸经历过从 56k 到 128k 和 ADSL 的时代“宽带症候群” 是我每天
-
39
感觉实现了很多学生的梦想
-
6
本文转载自微信公众号「飞天小牛肉」,作者小牛肉。转载本文请联系飞天小牛肉公众号。 数据库系列吭哧吭哧写得差不多了,准备寒假看完 JVM,然后开学来看看框架背背八股就准备秋招了。话不多说,JVM 第一个知识点必定要奉献给 Java 程序运行时的数据区...
-
2
一、智能运维现状大家对智能问答系统都很熟悉,目前许多APP都有智能问答系统——后台是一个机器人,而不是真正的人回答问题。当前众多研究者在对智能问答系统进行研究,提出了许多算法和技术,Google Scholar上关于智能问答系统的文章...
-
5
vivo X Fold+能让工作效率提升多少?ZOL副总裁亲身体验告诉你 2022-10-14 05:40:00 [ 中关村在线 原创 ] 作者:芝士分子
-
8
V2EX › MacBook Pro M1 Pro 芯片感觉没有说的那么厉害, 感觉不如 i7-12700F
-
8
梅西采访发言:有说急躁,不要气馁,我们将比以往更加团结 2022-11-25 作者:迪步 北京时间11月22日晚,卡塔尔世界杯迎来了一场集中...
-
5
用户亲身体验:和AI约会,是我这辈子最美妙的事情 常嘉帅 发表于 2023年02月09日 05:47...
-
6
作为 macOS 用户与键盘博主,我对适配 macOS 的键盘总有一种别样的执着。打开 Apple 商店,搜索键盘,没有一把是机械键盘,也没有那么多的配列供我选择,价格也不便宜。而部分第三方厂商生产的键盘,总会宣传自己的键盘适配 macOS,体验起来就会发现实际效果大打折扣...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK