Vite学习笔记

288 阅读4分钟

Vite特点

  • 开发时效高
  • 开箱即用 功能完备
  • 社区丰富、兼容rollup
  • 超高速热重载
  • 预设应用和类库打包模式
  • 前端类库无关

Vite是什么

基本概念

vite是一个构建工具的高阶封装,内部最核心的是rollup。

Vite目标

  • 使用简单。能封装的东西都封装了,集成了devServer,不像webpack还要单独配置devServer
  • 快。
  • 便于扩展

类似产品:snowpack、WMR、@web/dev-server(官方文档有对比)

传统构建工具的区别

  • High Level API
  • 不包含自己编译的能力(编译能力来自es6和rollup,它做一个串联)
  • 完全基于ESM加载方式的开发时

总结:webpack更全面 rollup更专一 vite更好用

vite不是为了构建而生,而是为了项目而生,减少了很多配置项

Vite减少的工作

  • devServer(webpack中需要自己配置devServer)
  • 各类loader(webpack中babel-loader,ts-loader,css-loader等)
  • build命令内置[dev build serve](webpack中可能dev和prod不同自己配置)

Vite优势

上手简单

开发效率极高

社区成本低(兼容rollup插件)

快!!

更合理的类比

Vue-cli(configureWebpack和chainWebpack可修改webpack配置)

Create-react-app(需要eject)

这些需要修改webpack仍然还要比较了解webpack配置才能修改

Vite创建vue3项目

vite伴随着vue3正式版本一起发的 最初版本1.0 以vue为主

后来快速更新版本2.0 更新为与前端框架无关的跨框架工具

npm init @vitejs/app



yarn create @vitejs/app

@vitejs/create-app is deprecated, use npm init vite instead

vscode中可以使用code vite-vue3可以进入项目

注:webpack中可以在开发时做eslint校验,可配置esloader等。但是vite中不支持,可以在vite命令中手动执行校验eslint命令

注:webpack和rollup的入口文件一般来说是js文件,但是vite的编译入口必须是html

原因:vite一开始不编辑main.js和app.vue等文件,而是直接让浏览器去加载html文件,通过html中的script标签,去加载src/main.js。script的加载请求到达vite的server时,才会去查找加载这个文件。

推荐使用yarn去安装vite的依赖,使用npm会有些问题

Vite创建vue2项目

vue2没有出现在默认语言框架列表

underfin/vue-plugin-vue2

Vite创建react项目

plugin-react-refresh=》解决了rhl无法解决的问题、速度更快、

react-hot-loader

现在的vite版本已经没有shi使用plugin-react-refresh

Vite基本使用

css

postcss.config.js中可配置css相关

vite中天然支持css-module 创建css时直接写xxx.module.scss(.css/.less)

vite 中天然支持pre-processors 只需要安装响应的loader即可 比如使用less 执行yarn add less即可

typescript

vite天生支持ts,在开发环境中vite使用的esbuild,esbuild本身就是支持ts语法的。

关于esbuild的文章

zhuanlan.zhihu.com/p/379164359

但需要注意的是vite只编译,不校验。如果我们想要校验的话,需要手动执行tsc --noEmit。

安装typescript并配置tsconfig.json

vue校验

如何校验.vue文件

vue-tsc for SFC

ts原生不支持.vue文件,所以他肯定不会做.vue文件的校验,需要使用专门的工具校验.vue文件

首先安装vue-tsc

yarn add vue-tsc

在package.json中

  "scripts": {

    "dev": "vite",

    "build": "vue-tsc --noEmit && tsc --noEmit && vite build",

  ...

  }

isolatedModules

vite提供的typescript只是编译语法,针对单文件。但是typescript是可以关联不同的文件的,所以可以在tsconfig中配置"isolatedModules":true

Exports of Non-Value Identifiers

Non-Module Files

References to const enum members

client types

vite中提供了一些内置对象,有import.meta.url等,meta这个类型需要ts认识才能使用,不然可能会报错。

在tsconfig中配置"types":["vite/client"]

Asset imports

Enc

Hmr

静态文件处理

types

eg. import test from './test?url'

url(拿到test文件的路径)

raw(将test文件中的代码以字符串形式输出)

worker/worker inline(webworker)

json

vite自动帮忙处理好了json的引入

Import packageJson from './package.json'

web assembly

eslint&pritter

安装第三方的插件

 yarn add eslint eslint-config-standard eslint-plugin-import eslint-plugin-

promise eslint-plugin-node -D

.eslintrc.js中

module.exports = {

  extends: 'standard'

}

pritter设置首先要在vscode中安装pritter插件

然后配置.prettierrc。可自行配置格式化代码的规则,然后可以在vscode的格式化代码中配置使用prettier

{

  "semi": false,

  "singleQuote": true

}

不符合项目代码规范的===》阻止git push

实际上原理是 git hooks, 在commit之前执行某些脚本

yarn add husky

npx husky install

npx husky add ./husky/pre-commit "npm run lint"

package.json中

可自行设置eslint需要校验的文件夹

  "scripts": {

    "dev": "vite",

    "build": "vue-tsc --noEmit && tsc --noEmit && vite build",

    "preview": "vite preview",

    "lint": "eslint --ext js src/"

  },

环境变量

MODE

BASE_URL

PROD

DEV

SSR

注意:production replacement

在main.ts中输出了vite内置import.meta.env , import.meta.env.MODE

执行yarn build后编译出来的文件,import.meta.env , import.meta.env.MODE都被替换成了对应的值

总结:

在生产环境中,这些环境变量会在构建时被静态替换,因此,在引用它们时请使用完全静态的字符串。动态的 key 将无法生效。例如,动态 key 取值 import.meta.env[key] 是无效的。