Vite 构建工具学习笔记

249次阅读
没有评论

共计 2855 个字符,预计需要花费 8 分钟才能阅读完成。

什么是构建工具

首先,看下企业级项目里可能会用到哪些功能:

  • TypeScript:如果遇到 ts 文件需要使用 tsc 将 TypeScript 代码转换为 js 代码
  • React/Vue:安装 react-compiler/vue-complier,将 jsx 文件或者 vue 文件转换为 render 函数
  • less/sass/postcss/component-style:需要安装 less-loader,sass-loader 等一系列编译工具
  • 语法降级:babel 将 ES 新语法转换为旧版浏览器可接受语法
  • 体积优化:uglifyjs 将代码进行压缩,变成体积更小性能更高的文件

而浏览器只认识 html,css,js,所以就需要一个东西能够把这些功能集成到一起,这个东西就是 构建工具。将我们写的浏览器不认识的代码,交给构建工具进行编译处理的过程叫做打包,打包完成以后会给出浏览器可以认识的文件。

构建工具承担了哪些脏活累活:

  1. 模块化开发支持。支持直接从 node_modules 里引入代码 + 多种模块化支持
  2. 处理代码兼容性。比如 babel 语法降级,less/ts 语法转换(不是构建工具做的,构建工具只是将这些语法对应的处理工具 集成进来自动化处理
  3. 提高项目性能。压缩文件,代码分割
  4. 优化开发体验:

    • 自动监听文件变化:当文件变化后自动调用对应集成工具进行重新打包,然后在浏览器重新运行(整个过程叫做热更新,hot replacement)
    • 开发服务器:解决跨域问题

总之,构建工具让我们不用关心生产的代码如何在浏览器上运行,只需关心我们的开发就行了。

手动安装 Vite

首先,新建一个项目文件夹 test-vite:mkdir test-vite && cd test-vite

前置准备

  • 安装 Node.js 版本 18+ 或 20+
  • 安装好 pnpm:npm i -g pnpm

配置 npm 全局安装路径,以管理员身份运行命令:npm config set prefix "E:\develop\NodeJS",E:\develop\NodeJS 是 Node.js 安装目录。

配置 npm 镜像源地址:npm config set registry https://registry.npmmirror.com

开箱即用

安装 vite 命令行工具:pnpm add -D vite

创建一个 index.html 文件:<p>Hello Vite!</p>

然后在终端中运行 vite:pnpm vite,就可以在 http://localhost:5173 上访问 index.html。

依赖预构建

Vite 解决了 3 个问题:

  1. 不同的第三方包会有不同的导出格式,这个是 Vite 没法约束人家的
  2. 对路径的处理上可以直接使用.vite/deps,方便路径重写
  3. 网络多包传输的性能问题,这也是原生 ES Module 规范不敢支持 node_modules 的原因之一。有了依赖预构建,无论有多少的 export 和 import,Vite 都会尽可能的将他们进行集成,最后只生成一个或几个模块

配置文件

当以命令行方式运行 vite 时,Vite 会自动解析 项目根目录 下名为 vite.config.js 的配置文件。

配置智能提示

因为 Vite 本身附带 TypeScript 类型,所以可以通过 IDE 和 jsdoc 的配合来实现智能提示:

/** @type {import('vite').UserConfig} */
export default {// ...}

情景配置

新建 3 个配置文件:base 文件(vite.base.config.js)、开发环境(vite.dev.config.js)和生产环境(vite.prod.config.js)配置文件:

import {defineConfig} from 'vite'

export default defineConfig({// ...})

修改 vite.config.js 配置文件:

import {defineConfig} from 'vite'
import viteBaseConfig from './vite.base.config'
import viteDevConfig from './vite.dev.config'
import viteProdConfig from './vite.prod.config'

// 策略模式
const envResolver = {build: () => {console.log('生产环境...')
    return {...viteBaseConfig, ...viteProdConfig}
  },
  serve: () => {console.log('开发环境...')
    return {...viteBaseConfig, ...viteDevConfig}
  },
}

export default defineConfig(({command}) => {return envResolver[command]()})

修改 package.json 文件,添加:

  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "test": "vite --mode test"
  },

在终端中运行命令:pnpm devpnpm build

环境变量

vite 内置了 dotenv 这个第三方库,dotenv 会自动读取 .env 文件,并解析其中的环境变量,将其注入到 process 对象下(但 vite 考虑到和其他配置的一些冲突问题,并不会直接注入到 process 对象下)。

不过当你的确需要时,可以使用 Vite 导出的 loadEnv 函数来加载指定的 .env 文件。

新建 3 个环境变量配置文件:

  • .env 共用环境变量
  • .env.development 开发环境需要用到的环境变量
  • .env.production 生产环境需要用到的环境变量

修改 vite.config.js 配置文件的 export:

export default defineConfig(({command, mode}) => {const env = loadEnv(mode, process.cwd(), '')
  console.log('当前环境:', env)
  return envResolver[command]()})

在终端中运行命令:pnpm dev --mode development,会将 mode 设置为 development 传递进来。

当调用 loadEnv 时,会做如下几件事:

  1. 直接找到.env 文件,解析其中的环境变量,并放进一个对象里
  2. 将传进来的 mode 变量值进行拼接,如 .env.development,根据提供的目录去取对应的文件进行解析,并放进一个对象里

如果是客户端,Vite 会将对应的环境变量注入到 import.meta.env 里去。但为了防止将隐私性的变量直接送进 import.meta.env 中,所以 Vite 做了一层拦截。如果环境变量不是以 VITE 开头,就不会注入到客户端中去。如果想要更改 VITE 这个前缀,可以使用 envPrefix 配置。

vite 和 create-vite 的关系:
create-vite 是 vite 的脚手架,create-vite 内置了 vite。

正文完
 0
阿伯手记
版权声明:本站原创文章,由 阿伯手记 于2024-07-14发表,共计2855字。
转载说明:本站原创内容,除特殊说明外,均基于 CC BY-NC-SA 4.0 协议发布,转载须注明出处与链接。
评论(没有评论)
验证码

阿伯手记

阿伯手记
阿伯手记
喜欢编程,头发渐稀;成长路上,宝藏满地
文章数
766
评论数
204
阅读量
441200
今日一言
-「
热门文章
职场救急!AI请假话术生成器:1秒定制高通过率理由

职场救急!AI请假话术生成器:1秒定制高通过率理由

超级借口 不好开口?借口交给我!智能生成工作请假、上学请假、饭局爽约、约会拒绝、邀约推辞、万能借口等各种借口理...
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

本文收集了目前国内已部署 DeepSeek 模型的第三方列表,个个都是免费不限次数的满血版 DeepSeek,...
巴别英语:用美剧和TED演讲轻松提升英语听力与口语

巴别英语:用美剧和TED演讲轻松提升英语听力与口语

还在为枯燥的英语学习而烦恼吗?巴别英语通过创新的美剧学习模式,让英语学习变得生动有趣。平台提供海量美剧和 TE...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
TVAPP:开源电视盒子资源库,一键打造家庭影院

TVAPP:开源电视盒子资源库,一键打造家庭影院

导语 TVAPP 是一个专为 Android TV 电视盒子用户打造的开源影音资源库,集成了影视、直播、游戏等...
2025年12月 每日精选

2025年12月 每日精选

关于每日精选栏目 发现一些不错的资源,点击 这里 快速投稿。 12 月 26 日 .ax 顶级域 目前全球唯一...
最新评论
15220202929 15220202929 怎么用
八对 八对 麻烦大佬更新下【堆新】的友链站名:八对星星描述:极目星视穹苍无界•足履行者大地有疆链接:https://8dui.com图标:https://cf.8dui.com/logo.webp横标:https://cf.8dui.com/logo-w.webp订阅:https://8dui.com/rss.xml
三毛笔记 三毛笔记 已添加
DUINEW DUINEW 已添加贵站,期待贵站友链~博客名称:堆新博客地址:https://duinew.com/博客描述:堆新堆新,引力向新!——堆新(DUINEW)博客头像:https://d.duinew.com/logo.webp横版头像:https://d.duinew.com/logo-w.webp博客订阅:https://duinew.com/rss.xml
hedp hedp 没看懂
bingo bingo 直接生成就可以啦,也可以添加一些选项
满心 满心 申请更新下友联信息,原名:满心记,现名:周天记原域名:qq.mba,现域名:zhoutian.com描述:我在人间混日子
开业吉日 开业吉日 没看明白这个怎么用
开业吉日 开业吉日 beddystories 这个网站太赞了,收藏
热评文章
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

本文收集了目前国内已部署 DeepSeek 模型的第三方列表,个个都是免费不限次数的满血版 DeepSeek,...
清华大学官方免费DeepSeek教程

清华大学官方免费DeepSeek教程

AI 领域近期最引人注目的焦点当属 DeepSeek,这款由中国创新企业深度求索研发的人工智能工具,正以开放源...
Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 是一款基于 Fastify、Vercel 和 Supabase 构建的 URL 缩短服务...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
BeddyStories 完全免费儿童睡前故事库,让孩子随时随地入睡更轻松

BeddyStories 完全免费儿童睡前故事库,让孩子随时随地入睡更轻松

BeddyStories 是一个致力于为儿童提供优质睡前故事的在线平台,用户可以在这里找到来自世界各地的经典故...
DrawLink:一键生成链接视觉卡片,提升分享点击率

DrawLink:一键生成链接视觉卡片,提升分享点击率

小贴士 :此站或已变迁,但探索不止步。我们已为您备好「类似网站」精选合集,相信其中的发现同样能为您带来惊喜。