体验Vite快速构建项目

image

前端大佬尤雨溪在知乎上回答这样一个问题, 随着vite2.0的发布,直接引爆前端圈。

那么vite到底好在哪里,如何使用呢?

接下来由大师兄带你一起走进vite世界。

image

一. Vite简介

Vite是一种新型前端构建工具,能够显著提升前端开发体验。

在日常开发中,一般使用Webpack对项目进行构建编译,最后打包成Bundle文件。

当冷启动开发服务器时,基于打包器的方式启动必须有限抓取并构建整个应用之后才能提供服务,随着项目的规模越大,Webpack启动服务器变得缓慢。

而Vite 通过在一开始将应用中的模块区分为依赖源码两类,改进了开发服务器启动时间。

Vite以原生ESM方式提供源码。这实际上是让浏览器接管了打包程序的部分工作:Vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入代码,即只在当前屏幕上实际使用时才会被处理。

image

image
浏览器支持

开发环境中:Vite需要在支持原生 ES 模块动态导入的浏览器中使用。

生产环境中:默认支持的浏览器需要支持 通过脚本标签来引入原生 ES 模块 。可以通过官方插件 @vitejs/plugin-legacy 支持旧浏览器。

二. 项目搭建

1.环境准备

Vite需要Node.js版本 >=12.0.0
查看Node版本,如低于12.0.0 请升级

➜ node -v
➜ v16.1.0
2.创建项目
# 使用npm
➜ npm init @vitejs/a

# 安装依赖
➜ npm install

# 启动项目
➜ npm run dev
image

浏览器输入地址后我们可以看到服务已启动

image
3.Vite配置文件修改

图中对比通过vue-cli创建的项目,我们可以发现index.html在项目最外层而不是在public文件夹内。这是有意而为之的:在开发期间Vite 是一个服务器,而index.html是该 Vite 项目的入口文件。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite App</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>

Vite将index.html视为源码和模块图的一部分。Vite解析<script type="module" src="...">,这个标签指向你的JavaScript源码。

// 更多相关vite配置参考官网文档:https://cn.vitejs.dev/config/
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  //项目根目录(index.html 文件所在的位置)
  root : './src',
  //开发或生产环境服务的公共基础路径
  base : './',
  //开发模式 默认:'development'(开发模式),'production'(生产模式)
  mode : 'development',
  server : {
  
  }
})
4.集成路由 Vue Router

Vue Router是 Vue.js官方的路由管理器。它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌。

# 安装Vue Router4
➜ npm install vue-router@4

新建文件:src/arouter/index.ts

import { createRouter, createWebHashHistory } from 'vue-router'
import Home from '../views/Home.vue'

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  }
]
const router = createRouter({
  history: createWebHashHistory(),
  routes
})
export default router

在main.ts下引入

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

createApp(App).use(router).mount('#app')
5.集成状态管理 Vuex

Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

# 安装vuex
npm install vuex@next --save

新建文件src/strore/index.ts

import { createStore } from 'vuex'

export default createStore({
  state: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

在main.ts下引入

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

createApp(App).use(router).use(store).mount('#app')
6.集成网络请求工具 Axios
# 注:具体使用方式参考官网文档
# 安装Axios
npm install axios
7.集成代码规范工具 Eslint

ESLint是一个开源的JavaScript代码检查工具,由 Nicholas C. Zakas 于2013年6月创建。代码检查是一种静态的分析,常用于寻找有问题的模式或者代码,并且不依赖于具体的编码风格。

# 安装 ESLint:
npm install eslint --save-dev
# 创建配置文件
# 这里推荐使用终端提示w完成配置操作
npx eslint --init
image

上图大概意思为:

  1. How would you like to use ESLint? (你想如何使用 ESLint?)
    选择To check syntax, find problems, and enforce code style(检查语法、发现问题并强制执行代码风格)
  2. What type of modules does your project use?(你的项目使用哪种类型的模块?)
    选择 JavaScript modules (import/export)
  3. Which framework does your project use? (你的项目使用哪种框架?)
    选择 Vue.js
  4. Does your project use TypeScript?(你的项目是否使用 TypeScript?)

yes

  1. Where does your code run?(你的代码在哪里运行?)
    选择 Browser 和 Node
  2. How would you like to define a style for your project?(你想怎样为你的项目定义风格?)
    选择 Use a popular style guide(使用一种流行的风格指南)
  3. Which style guide do you want to follow?(你想遵循哪一种风格指南?)
    我们这里选择 Airbnb.ESLint 为我们列出了三种社区流行的 JavaScript 风格指南,
    分别是 Airbnb、Standard、Google(这里根据个人喜好选择吧...)
  4. What format do you want your config file to be in? (你的配置文件是使用什么格式的?)
    选择JavaScript
  5. Would you like to install them now with npm?(你想现在就用 NPM 安装它们吗?)
    yes

完成上述操作后,会在根目录下生成.eslintrc.js文件!

根据项目需求,我们也可以追加自定义ESLint规则

module.exports = {
  env: {
    browser: true,
    es6: true,
  },
  extends: [
    'plugin:vue/essential',
    'airbnb-base',
  ],
  globals: {
    Atomics: 'readonly',
    SharedArrayBuffer: 'readonly',
  },
  parserOptions: {
    ecmaVersion: 2018,
    parser: '@typescript-eslint/parser',
    sourceType: 'module',
  },
  plugins: [
    'vue',
    '@typescript-eslint',
  ],
  rules: {
  },
};

至此,一个简单的项目已经搭建完成,赶紧关注回复「Vite」获取相关示例源码哦~~
上述的工具也不是必须的,但是接入成熟的工具可以更有效的提高我们的开发效率和代码质量,共勉。

原创不易,如文章对你有帮助,你的点赞、留言、分享就是大师兄写下去的动力!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容