vite配置-基础篇

写在前面的话:作者最近正在学习vite配置,各种小的碎的知识点扑面而来。俗话说,好记性不如烂笔头,那就记一记。有错误的地方欢迎指正👏

vite为什么这么快?

1、传统的工具vue-cli、create-react-app启动项目时就要从入口文件开始把所有的文件编译成bundle。而vite在启动的时候只做了需要的文件的编译,等到真正去访问特定route的时候,才根据需求编译文件,作者称之为懒编译。

2、vite使用了esbuild的工具,在运行开发环境的的时候,使用esbuild来编译,它的性能比webpack、rollup都要高,具体可以查看下esbuild官网对比图表。

CSS配置

对css modules、css variables的支持

vite对css variables、css modules、有良好的支持,可以在项目中直接使用。

对pre-processor的支持

使用css pre-processors,直接安装对应的包即可 如使用sass,npm install less -D,安装依赖即可使用

对postcss的支持

在项目根目录创建postcss.config.js,配置自己需要plugins,即可使用 如配置autoprefixer

在postcss.config.js中配置

安装依赖

js 复制代码
    npm install autoprefixer -D // vite内置了postcss依赖,不需要再装postcss
js 复制代码
   module.exports = {
      plugins: [
          require('autoprefixer')({
                 overrideBrowserslist: [
                    'Android 4.1',
                    'iOS 7.1',
                    'Chrome > 31',
                    'ff > 31',
                    'ie >= 8',
                    'last 10 versions', // 所有主流浏览器最近10版本用
                ],
                grid: true,
          })
      ],
    }
或在vite.config.ts中配置
js 复制代码
import { defineConfig } from 'vite';
import autoprefixer from 'autoprefixer';

export default defineConfig({
  css: {
    postcss: {
      plugins: [
        autoprefixer({// 启用 autoprefixer
            overrideBrowserslist: [
                    'Android 4.1',
                    'iOS 7.1',
                    'Chrome > 31',
                    'ff > 31',
                    'ie >= 8',
                    'last 10 versions', // 所有主流浏览器最近10版本用
            ],
            grid: true,
        }) 
      ]
    }
  }
});

效果:

css 复制代码
// 编译前
@bgColor: red;

.root {
  background-color: @bgColor;
  display: flex;
  transform: translateY(100px);
}

// 编译后
.root {
    background-color: red;
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-transform: translateY(100px);
    -ms-transform: translateY(100px);
    transform: translateY(100px);
}

一些常用postcss插件

  • autoprefixer: 自动添加浏览器前缀,如-webkit-,-moz-
  • postcss-preset-env: 使用自定义属性、嵌套等
  • cssnano: 移除注释、空白字符、重复代码
  • stylelint:css代码错误检查和规范
  • postcss-import:支持@import

TS集成

vite原本支持ts语法,但只编译不校验。只是将ts语法编译成js,给浏览器加载 我们可以在dev命令行中加入tsc --noEmit,只做类型检查而不生成对应的js.d.ts文件 在根目录创建 tsconfig.json, tsc命令会根据该文件规则来校验

简单版tsconfig.json

js 复制代码
{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext", //esmodule vite开发环境模块加载js模块必须使用esmodule加载
    "moduleResolution": "node", //使用node解析模块
    "strict": true,
    "jsx": "preserve", //ts不编译jsx语法,留给项目里vue-jsx插件去编译
    "sourceMap": true, // 开启浏览器可以直接调试ts代码
    "resolveJsonModule": true, //是否可以直接import json
    "esModuleInterop": true, // import react from 'react';不开启就要import * as react from 'react'
    "lib": ["esnext", "DOM"], //支持的内置module
    "types": ["vite/client"], // 引入包自带的类型定义文件
    "isolatedModules": true // 独立编译;避免隐式依赖;提高兼容性(在非ts环境如babel中也能正确编译
  },

  "exclude": ["node_modules"],
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

其中"types": ["vite/client"]的引入,方便ts对特定类型的识别,如import静态文件,env环境变量,HMR API

静态资源处理

vite提供了以下的文件引入: url、raw、worker/worker inline、json、webassembly(www.assemblyscript.org/)

如我们创建一个test.ts文件,不同的引入方式可以获取不同的内容

js 复制代码
import test from './test?url'  // ?url 返回文件路径
import test from './test?raw' // ?raw 文件代码以字符串的形式引用
import worker / worker inline  
// WebWorker帮助我们构建更高性能的工具,将计算量很大的进程放到一个线程

Eslint和Prettier

vite在开发过程中,编译时是不会做eslint校验的,保证开发效率

husky 尝试提交代码,husky 会自动运行 npm run lint。如果 lint 检查失败,提交会被阻止

terminal 复制代码
npm install husky --save-dev
npx husky init
npx husky add .husky/pre-commit "npm test"
npx husky add .husky/pre-commit "npm run lint"

.eslintrc.js

js 复制代码
module.exports = {
  extends: 'standard',
  globals: {
    postMessage: true,
  },
  rules: {
    'space-before-function-paren': 'off',
  },
}

.prettierrc

js 复制代码
{
  "semi": false,
  "singleQuote": true
}

环境变量

vite内置环境变量:MODE、BASE_URL、PROD、DEV 也可以自定义环境变量:VITE_开头 也可以在根目录创建匹配不同的环境 .env.development .env.production .env.development.local

写完了,,好长。我会再来复习的!

相关推荐
小kian1 天前
vite安全漏洞deny解决方案
前端·vite
DevinJohw3 天前
为什么我选择[email protected]
react.js·vite
页面魔术4 天前
[译]专访尤雨溪: 2025年有什么计划?
前端·vue.js·vite
用户74054639943094 天前
Vite开发服务器遇到大量依赖需要优化导致重启的问题
vite
前端与小赵5 天前
webpack和vite之间的区别
前端·webpack·vite
给钱,谢谢!5 天前
记录vite引入sass预编译报错error during build: [vite:css] [sass] Undefined variable.问题
前端·css·sass·vite
小遁哥5 天前
vue3接入tailwindcss3
css·vue.js·vite
xiaoyan20158 天前
vue3.5+deepseek+arco+markdown搭建web版流式输出AI模板
vue.js·vite·deepseek
wordbaby8 天前
Vite 中的 Import 打包机制详解
前端·vite
Yvette-W8 天前
【更新中】【React】基础版React + Redux实现教程(Vite + React + Redux + TypeScript)
前端·javascript·react.js·typescript·前端框架·vite·redux