Vue3与Webpack和Vite构建对比分析

需积分: 9 0 下载量 78 浏览量 更新于2024-12-15 收藏 773KB ZIP 举报
资源摘要信息:"在这篇文章中,我们将深入探讨Vue3与webpack4以及Vite构建工具相结合时,对chunk-vendor代码来源的影响。我们将分析webpack和Vite在处理Vue3项目时的异同,并且探讨Vite对cmd代码的特殊处理方式。" 1. 分析Vue3和Webpack4的chunk-vendor代码来源 在使用Vue3和webpack4进行项目构建时,webpack会根据项目的依赖关系来生成chunk文件。在Vue3中,我们通常会使用Vue CLI或者直接配置webpack来打包应用。在这个过程中,webpack会把项目中的一些共用的依赖模块(如vue, vue-router, vuex等)打包成一个单独的chunk文件,这个文件通常被称为chunk-vendor。 webpack的工作原理是从入口文件开始分析模块依赖关系,使用各种loader处理文件,最终生成打包文件。在处理Vue3项目时,webpack会将第三方库和项目内部的共享代码分离出来,以提高加载效率。通常,这部分代码因为变更频率较低,会被webpack通过各种优化策略(如split chunks插件)提取到单独的chunk-vendor.js中。这样做的好处是可以减少主应用文件大小,加快首屏加载速度,并且在这些库更新时,能够有效地利用浏览器缓存。 2. 分析Vue3和Vite的chunk-vendor代码来源 Vite是一个新型前端构建工具,它在开发时通过原生ESM提供服务,而构建时则利用Rollup打包。Vite对于Vue3的支持是原生的,因为它利用了Vue3中引入的组合式API,使得代码能够更好地拆分和组织。 当使用Vite构建Vue3项目时,Vite会将依赖进行预构建,并将这些依赖打包成一个单独的chunk-vendor.js。与webpack类似,Vite也会把那些经常不怎么改变的第三方库和共享代码分离出来。然而,Vite使用了不同的机制来处理这些依赖,它在开发时通过创建一个ESM服务器来提供服务,利用浏览器原生支持的ESM能力,能够提供更快的热更新速度。 Vite的预构建机制可以更快地处理npm依赖,因为它通过执行ESBuild将依赖项转换为ESM格式,这比传统的构建工具使用JavaScript转译更为高效。预构建后的依赖会被打包成一个单一的chunk-vendor.js文件,这个过程可以显著减少构建时间和提高运行时的性能。 3. Vite对cmd代码的处理 Vite对cmd(CommonJS)代码的处理是通过其内部的转换器来完成的,它能够智能地识别项目中使用到的CommonJS格式的依赖,并将它们转换为ESM格式。这一过程不需要用户进行任何额外的配置。 由于Vite使用ESBuild进行预构建,它能直接处理CommonJS模块,无需将其转换为ESM,因为ESBuild本身就支持CommonJS模块的加载。这样,Vite能够保留CommonJS模块的特性,同时将其转换为浏览器可以直接执行的代码。 Vite对cmd代码的处理还包括对构建后的代码的优化。Vite能够识别CommonJS代码中的依赖,并自动将它们转换为ESM的import语句。这样,在最终打包时,Vite可以实现更高效的模块加载和执行。此外,Vite还利用了Tree Shaking技术来减少打包文件的大小,只包括那些实际被使用的代码,进一步优化了构建输出。 总结来说,无论是在webpack还是Vite中,对chunk-vendor代码的来源和处理都至关重要,因为它直接影响到最终应用的性能和加载效率。webpack通过它的插件和loader系统来优化依赖打包,而Vite则利用了现代浏览器的原生支持和ESBuild的快速构建能力,对依赖进行高效的管理。在处理cmd代码时,Vite通过内置转换器来识别和处理CommonJS模块,实现了在Vue3项目中更优的构建和运行时性能。
2023-07-23 上传

index.js:4130 Cannot find module './uni_modules/uview-ui/components/u-navbar/u-navbar.vue' Qld0 @ index.js:4130 __webpack_require__ @ index.js:854 fn @ index.js:151 JLrY @ index.js:1430 __webpack_require__ @ index.js:854 fn @ index.js:151 eval @ kyBj:2 kyBj @ index.js:4897 __webpack_require__ @ index.js:854 fn @ index.js:151 eval @ main.js:36 Tglg @ index.js:4322 __webpack_require__ @ index.js:854 fn @ index.js:151 1 @ index.js:1057 __webpack_require__ @ index.js:854 checkDeferredModules @ index.js:46 (anonymous) @ index.js:994 (anonymous) @ index.js:997 index.js:4131 1. 排查组件名称拼写是否正确 Qld0 @ index.js:4131 __webpack_require__ @ index.js:854 fn @ index.js:151 JLrY @ index.js:1430 __webpack_require__ @ index.js:854 fn @ index.js:151 eval @ kyBj:2 kyBj @ index.js:4897 __webpack_require__ @ index.js:854 fn @ index.js:151 eval @ main.js:36 Tglg @ index.js:4322 __webpack_require__ @ index.js:854 fn @ index.js:151 1 @ index.js:1057 __webpack_require__ @ index.js:854 checkDeferredModules @ index.js:46 (anonymous) @ index.js:994 (anonymous) @ index.js:997 index.js:4132 2. 排查组件是否符合 easycom 规范,文档:https://uniapp.dcloud.net.cn/collocation/pages?id=easycom Qld0 @ index.js:4132 __webpack_require__ @ index.js:854 fn @ index.js:151 JLrY @ index.js:1430 __webpack_require__ @ index.js:854 fn @ index.js:151 eval @ kyBj:2 kyBj @ index.js:4897 __webpack_require__ @ index.js:854 fn @ index.js:151 eval @ main.js:36 Tglg @ index.js:4322 __webpack_require__ @ index.js:854 fn @ index.js:151 1 @ index.js:1057 __webpack_require__ @ index.js:854 checkDeferredModules @ index.js:46 (anonymous) @ index.js:994 (anonymous) @ index.js:997 index.js:4135 3. 若组件不符合 easycom 规范,需手动引入,并在 components 中注册该组件 Qld0 @ index.js:4135 __webpack_require__ @ index.js:854 fn @ index.js:151 JLrY @ index.js:1430 __webpack_require__ @ index.js:854 fn @ index.js:151 eval @ kyBj:2 kyBj @ index.js:4897 __webpack_require__ @ index.js:854 fn @ index.js:151 eval @ main.js:36 Tglg @ index.js:4322 __webpack_require__ @ index.js:854 fn @ index.js:151 1 @ index.js:1057 __webpack_require__ @ index.js:854 checkDeferredModules @ index.js:46 (anonymous) @ index.js:994 (anonymous) @ index.js:997 Request.js:53 Uncaught TypeError: f is not a function at Request.setConfig (Request.js:53:23) at Object.install (http.interceptor.js:4:24) at Vue.use (chunk-vendors.js:7461:22) at eval (main.js:160:5) at Object.Tglg (index.js:4322:1) at __webpack_require__ (index.js:854:30) at fn (index.js:151:20) at 1 (index.js:1057:18) at __webpack_require__ (index.js:854:30) at checkDeferredModules (index.js:46:23)解决

2023-07-14 上传
2023-05-31 上传