vite — 超快且方便的编译工具
我们编写的代码,比如 ES6、 TypeScript、react 等是不能被浏览器直接识别的,需要通过 webpack 、rollup 这样的构建工具来对代码进行转换、编译。
但随着项目越来越大,需要处理的资源越来越多,构建工具也需要很长的时间才能开启服务,因此产生了新型的前端构建工具 Vite ,可以提升编译速度和减少构建配置。
浏览器支持 esmodule
vite 基于 esmodule 来对资源进行处理,浏览器本身已支持 esmodule ,html 文件引入 js 资源时,增加一个 type 类型即可。
<script src="./src/index.jsx" type="module"></script>
某些第三方库也有模块化的版本,比如 lodash,浏览器可直接支持 lodash-es,在 src/index.js 从 node_modules 中引入。
import _ from '../node_modules/lodash-es/lodash.js';
console.log(_.join(','));
这个时候打开 html 页面,我们会发现 lodash.js 资源加载后,还发送了很多其它的 js 请求

直接使用浏览器支持的模块化,一方面请求资源非常多,另一方面如果不支持 esmodule 的库在浏览器运行就直接报错了。
如何处理资源
当存在浏览器所不能识别的资源时,vite 首先通过 connect 处理成 esmodule 的内容,比如 index.ts 处理成 index.js,当请求 index.ts 文件的时候,重定向到已处理好支持 esmodule 的 index.js 文件上。
ES6、TS 、React 等资源都是通过 ESBuild 来处理的,它类似 babel 工具,但是它具有更快的编译速度,因为是使用 Go 语言编写,无需经过字节码,可直接转换成机器代码。

vite 无需配置就能处理资源
使用 vite 和 webpack 一样,都需要全局或者项目安装依赖。
css
无论是 css、less 还是处理兼容性的 postcss,在 webpack 中都是需要借助合适的 loader 来对资源进行处理的,而 vite 中已内置处理,配置更为简单。
| webpack | vite | |
|---|---|---|
| css | css-loader | - |
| less | less-loader、less | less |
| postcss | postcss-loader、plugin 如 pocss-preset-env | postcss-preset-env |
postcss 处理兼容性的配置需要在 postcss.config.js 中定义
module.exports = {
plugins: [require('postcss-preset-env')],
};
typescript
ts 代码也是不需要 loader 或者 plugin 来处理的,只需要安装 typescript
创建 ts 文件,将资源引入到入口 js 文件中
const mul = (a: number, b: number) => {
return a * b;
};
console.log(mul(6, 8));
通过 vite 开启服务,200ms 就开启,并且内置热更新

媒体资源
图片类资源在 webpack 中需要通过 url-loader、file-loader 或者配置 asset module type 来处理,在 vite 中,无需做任何配置,直接引入即可。
import cat from './image/cat.jpg';
const img = document.createElement('img');
img.src = cat;
img.width = 300;
document.body.appendChild(img);
在浏览器页面上就可以直接看到效果

jsx
react 代码也可以被 vite 识别,但需要后缀使用 jsx,入口文件 index.js 改为 index.jsx,并修改 html 页面的引入。
<script src="./src/index.jsx" type="module"></script>
vite.config.js
虽然以上场景 vite 都已经内置处理功能,但配置文件也不是完全用不到的,默认配置文件名 vite.config.js,比如对于 vue 的处理。
import { createVuePlugin } from 'vite-plugin-vue2';
export default {
plugins: [createVuePlugin()],
};
新增依赖被压缩会进行提示

打包指令
- npx vite 开启本地服务,内置了热更新
- npx vite build 生成编译文件
- npx vite preview 预览编译后的文件
创建 vite 项目
以上将 vite 作为工具来处理资源,还可以直接通过 vite 创建关于 react 或者 vue 的脚手架。执行 npm init vite 选择需要的项目

创建完成后,通过 npm install 安装所需要的依赖,然后在 package.json 中查看指令,就可以启动啦~

总结
- vite 基于 esmodule 来处理数据,使用到工具 ESBuild,编译速度非常快
- css、less、typescript、react 在 vite 中可以直接使用
- 默认配置文件 vite.config.js 可添加其它配置,如 plugin
- vite 提供了编译后预览的指令 npx vite preview
以上就是 vite 编译资源 的介绍, 更多有关 前端、工程化 的内容可以参考我其它的博文,持续更新中~
vite — 超快且方便的编译工具的更多相关文章
- [转帖]推荐一款比 Find 快 10 倍的搜索工具 FD
推荐一款比 Find 快 10 倍的搜索工具 FD https://www.hi-linux.com/posts/15017.html 试了下 很好用呢. Posted by Mike on 2018 ...
- 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库
工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...
- PixiJS - 基于 WebGL 的超快 HTML5 2D 渲染引擎
Pixi.js 是一个开源的HTML5 2D 渲染引擎,使用 WebGL 实现,不支持的浏览器会自动降低到 Canvas 实现.PixiJS 的目标是提供一个快速且轻量级的2D库,并能兼容所有设备.此 ...
- 推荐两款好用的反编译工具(Luyten,Jadx)
使用JD-Gui打开单个.class文件,总是报错// INTERNAL ERROR 但当我用jd-gui反编译前面操作获得的jar文件的时,但有一部分类不能显示出来--constants类,仅仅显示 ...
- koala预编译工具的使用
Koala是一个开源的预处理语言图形编译工具,目前已支持Less.Sass.Compass与CoffeeScript. 安装Koala 在Koala官网根据你的系统平台下载对应的版本.Linux系统要 ...
- apk反编译工具
反编译工具: apktool:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar:将apk反编译成Java源码(classes.dex转化成jar文件) jd-gui:查看APK中 ...
- less及编译工具介绍
什么是LESSCSS LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量.继承.运算.函数等,更方便CSS的编写和维护. LE ...
- eclipse安装反编译工具
身为一名程序员来说,日常最常做的就是编写代码和查看别人写好的源代码了,有时候打开别人写的class文件发现根本不是自己想要的,所以给大家介绍一种eclipse中反编译class文件的工具. 第一步:下 ...
- Koala – 开源的前端预处理器语言图形编译工具
koala 是一个前端预处理器语言图形编译工具,支持 Less.Sass.Compass.CoffeeScript,帮助 Web 开发者更高效地使用它们进行开发.跨平台运行,完美兼容 Windows. ...
- .net混淆、反编译工具调查
常用的工具列表[比较常见的] 混淆器.加密 Dotfuscator VS默认带的工具,不过是个社区版 强度不大 dotNET Reactor 使用了NativeCode 和混淆的形式 Xenocode ...
随机推荐
- allure测试报告美化与定制
一份简单的测试报告 一份简单的测试报告可以使用pytest的插件html就可以生成, demo如下 先下载 pip install pytest-html 下载完之后,在当前执行过测试用例的测试目录下 ...
- STL------sort三种比较算子定义
sort的三种比较算子的定义方式 例:一道细碎的细节模拟题: http://newoj.acmclub.cn/contests/1258/problem/3 1932: 2018蓝桥杯培训-STL应用 ...
- 2022-01-31:迷宫 III。 由空地和墙组成的迷宫中有一个球。球可以向上(u)下(d)左(l)右(r)四个方向滚动,但在遇到墙壁前不会停止滚动。当球停下时,可以选择下一个方向。迷宫中还有一个洞
2022-01-31:迷宫 III. 由空地和墙组成的迷宫中有一个球.球可以向上(u)下(d)左(l)右(r)四个方向滚动,但在遇到墙壁前不会停止滚动.当球停下时,可以选择下一个方向.迷宫中还有一个洞 ...
- Python encode()方法和decode()方法
Python encode()方法 encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为"编码".encode() ...
- Python竖版大屏 | 用pyecharts开发可视化的奇妙探索!
你好!我是@马哥python说,一枚10年程序猿,正在试错用pyecharts开发可视化大屏的非常规排版. 以下,我用8种ThemeType展示的同一个可视化数据大屏. 1.SHINE主题 2.LI ...
- web自动化01-环境搭建
1.自动化测试是什么? 借助工具实现 借助代码编写脚本实现 2.自动化测试需要掌握那些? web自动化测试基础 移动端自动化基础 pytest自动化测试框架 po设计模式 数据驱动 日志模块使用 自 ...
- 自然语言处理(NLP) - 前预训练时代的自监督学习
前预训练时代的自监督学习自回归.自编码预训练的前世 神经网络(Neural Network, NN) 损失函数,度量神经网络的预测结果和真实结果相差多少 平方差损失(欧式距离角度)预测概率分部和实际标 ...
- C++面试八股文:了解sizeof操作符吗?
某日二师兄参加XXX科技公司的C++工程师开发岗位第10面: 面试官:了解sizeof操作符吗? 二师兄:略微了解(不就是求大小的嘛..) 面试官:请讲以下如何使用sizeof? 二师兄:sizeof ...
- docker安装LuaJIT WEB应用防火墙
安装包请见 https://www.jianshu.com/p/b81656764613 Dockerfile #FROM ubuntu FROM centos MAINTAINER G00G1S C ...
- 高效处理报表,掌握原生JS打印和导出报表为PDF的顺畅技巧!
摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言篇 在日常工作中,报表打印和导出为PDF是经常要处理的任务 ...