webpack与vite使用差异
什么是构建工具
浏览器只认识
.html
,.css
,.js
,这就意味着当项目中使用了其他类型文件时(比如:.ts
,.vue
等)需要将其转换成浏览器能识别的文件才能正常运行项目,例如以下这些场景:
.ts
需要安装tsc
工具转换.ts->.js
.vue
需要安装vue-loader
和vue-template-compiler
转换成js
.less | .scss | sass
需要安装less-loader
,scss-loader
等一系列的loader
编译,最后才能在浏览器展示出来es新特性
在部分低级浏览器识别不了则需要安装babel
相关插件进行语法降级
构建工具不需要我们去手动一步一步处理这些编译过程,它会集成这些编译处理工具并完成这些流程,让开发人员只需要关注业务代码,代码经过构建工具处理后,就能直接显示在浏览器中
webpack
根据官网的描述
本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。
使用上的差异
- 引入静态资源需要使用
require
或者es6
规范的import
来加载 示例:1
2
3
4//esm
import img from '../img.png'
//common
const img = require('../img.png') - 动态导入读取文件使用
require.content
来一次性导出多个文件 示例:1
2
3
4
5
6
7
8
9
10const files = require.context('./modules', false, /\.ts$/)
files.keys().forEach(key => {
if (files(key).default !== undefined && files(key).default instanceof Array) {
files(key).default.forEach((item: RouteRecordRaw) => {
routes.push(item)
})
} else {
routes.push(files(key).default)
}
}) - 环境变量的引用
1
2//vue-cli中环境变量需以VUE_APP开头
const { VUE_APP_XX } = process.env
vite
根据官网的描述
下一代的前端工具链
- 使用原生 esm 文件,无需打包
- 轻量快速的热重载
- 对 typescript、jsx、css 等支持开箱即用
使用上的差异
引入静态资源使用
import
或者new URL
来加载 示例:1
2import img from '../img.png'
const img = new URL('../img.png', import.meta.url).href //不支持快捷路径@ 只能相对路径动态导入读取文件使用
import.meta.globEager
示例:1
2
3
4
5
6const files = import.meta.globEager('./modules/*.ts')
Object.values(files).forEach(key => {
if (key.default !== undefined && key.default instanceof Array) {
key.default.forEach(item => routes.push(item))
} else routes.push(key.default)
})环境变量的引用
1
2
3//普通文件引用
//vite中环境变量需以VITE_开头
const { VITE_BASE_URL } = import.meta.env1
2
3
4
5
6
7
8
9//vite.config.js
import { defineConfig, loadEnv } from 'vite'
export default ({ mode }) => {
//使用vite的loadEnv获取到环境变量
const { VITE_BASE_URL } = loadEnv(mode, process.cwd())
return defineConfig({
base: '/'
})
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 秋簌前端!