前言
Vite 和 Webpack 都是流行的前端构建工具,但它们在设计理念和实现方式上有一些关键区别,使得 Vite 在某些方面相比 Webpack 有明显的优势。
以下是 Vite 相比 Webpack 的一些主要优势:
- 更快的启动速度:Vite 使用原生的 ES 模块(ESM)来实现更快的开发服务器启动时间。它在开发过程中按需加载模块,而不是像 Webpack 那样在启动时打包整个应用。因此,Vite 的开发服务器能够快速响应和启动。
- 更快的热更新(HMR):Vite 的热更新速度比 Webpack 更快。由于 Vite 直接利用浏览器的模块导入机制,只需要替换发生变化的模块,更新的速度和效率都得到了提升。
- 更简单的配置:Vite 的配置通常比 Webpack 更简单易用。Webpack 的配置文件可以非常复杂,而 Vite 通过合理的默认配置和更少的配置需求,简化了设置过程。
- 现代构建工具:Vite 是为现代浏览器和现代开发环境设计的,它充分利用了 ES 模块和浏览器的原生特性,避免了 Webpack 中的一些传统限制,如对 CommonJS 模块的处理。
- 更好的支持 TypeScript 和 JSX:Vite 对 TypeScript 和 JSX 的支持更加开箱即用,通常无需额外配置就可以在项目中使用这些特性。
- 更小的生产构建体积:Vite 在生产构建时使用了 Rollup 作为打包工具,这通常能生成更小的输出文件和更高效的代码分割,相比 Webpack 提供了更优的性能。
- 原生的动态导入:Vite 支持原生的动态导入(dynamic import),允许在应用运行时动态加载模块,而 Webpack 的实现可能需要更多配置和插件支持。
创建项目
首先要保证Node.js的版本为18.3 或更高版本
代码语言:javascript复制nvm list
nvm install 18.20.4
nvm use 18.20.4
创建项目
代码语言:javascript复制npm create vue@latest
根据提示创建即可。
添加Less
安装less
代码语言:javascript复制npm install -D less
这样就安装好了可以使用了
自动引用变量
vite.config.js中添加以下配置
代码语言:javascript复制import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
css: {
preprocessorOptions: {
less: {
additionalData: '@import "@/assets/css/_variables.less";',
javascriptEnabled: true
}
}
}
})
主要是
代码语言:javascript复制css: {
preprocessorOptions: {
less: {
additionalData: '@import "@/assets/css/_variables.less";',
javascriptEnabled: true
}
}
}
添加我们的变量文件/assets/css/_variables.less
@z_space_m: 1.6rem;
@z_font_m: 1.6rem;
@z_font_l: 1.8rem;
这个配置会自动将 _variables.less
文件引入到所有的 less
文件中,这样我们定义的变量less
文件就不用再引用就可以使用了。
全局样式
在main.js
中添加全局样式
import "@/assets/css/_common.less"
假如添加如下
代码语言:javascript复制.z_font_m {
font-size: @z_font_m;
}
.z_font_l {
font-size: @z_font_l;
}
这样所有页面就可以直接使用这些样式了。
页面中引用
代码语言:javascript复制<style lang="less">
@import "@/assets/css/home.less";
</style>
添加Sass
安装sass
代码语言:javascript复制npm install -D sass
这样就安装好了可以使用了
自动引用变量
vite.config.js中添加以下配置
代码语言:javascript复制import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
css: {
preprocessorOptions: {
scss: {
additionalData: '@import "@/assets/css/_variables.scss";',
javascriptEnabled: true
}
}
}
})
主要是
代码语言:javascript复制css: {
preprocessorOptions: {
scss: {
additionalData: '@import "@/assets/css/_variables.scss";',
javascriptEnabled: true
}
}
}
添加我们的变量文件/assets/css/_variables.scss
$z_space_m: 1.6rem;
$z_font_m: 1.6rem;
$z_font_l: 1.8rem;
这个配置会自动将 _variables.scss
文件引入到所有的 scss
文件中,这样我们定义的变量scss
文件就不用再引用就可以使用了。
全局样式
在main.js
中添加全局样式
import "@/assets/css/_common.scss"
假如添加如下
代码语言:javascript复制.z_font_m {
font-size: $z_font_m;
}
.z_font_l {
font-size: $z_font_l;
}
这样所有页面就可以直接使用这些样式了。
页面中引用
代码语言:javascript复制<style lang="scss">
@import "@/assets/css/home.scss";
</style>
添加Ant Design Vue
https://www.antdv.com/docs/vue/getting-started-cn
Ant Design 和 iView都是不错的UI框架,这里更推荐使用Ant Design,最大的原因是:
虽然Ant Design 和 iView都是使用的Less,但是Ant Design提供了一种新的设置主题的方式。
安装和引用
代码语言:javascript复制npm i --save ant-design-vue@4.x
引用
代码语言:javascript复制import {createApp} from 'vue'
import {createPinia} from 'pinia'
import App from './App.vue'
import router from './router'
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/reset.css';
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.use(Antd)
app.mount('#app')
修改主题
https://www.antdv.com/docs/vue/customize-theme-cn
修改主题变量
通过在 ConfigProvider 中传入 theme
,可以配置主题。
在升级 v4 后,将默认使用 v4 的主题,以下是将配置主题示例:
代码语言:javascript复制<template>
<a-config-provider
:theme="{
token: {
colorPrimary: '#00b96b',
},
}"
>
<a-button />
</a-config-provider>
</template>
添加iView
如果已经习惯使用iView可以参考下文设置。
安装和引用
安装
代码语言:javascript复制npm install view-ui-plus --save
main.js中引用
代码语言:javascript复制import "@/assets/css/_common.scss"
import {createApp} from 'vue'
import {createPinia} from 'pinia'
import App from './App.vue'
import router from './router'
import ViewUIPlus from 'view-ui-plus'
import 'view-ui-plus/dist/styles/viewuiplus.css'
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.use(ViewUIPlus)
app.mount('#app')
自定义主题
如果你的项目使用了 webpack/vite
工程,可以通过变量覆盖的方式来实现主题定制。
创建文件/assets/css/my-theme/index.less
。
并写入下面内容:
代码语言:javascript复制@import '~view-ui-plus/src/styles/index.less';
// Here are the variables to cover, such as:
@primary-color: #FA7E31;
完整的变量列表可以查看 默认样式变量。
然后在入口文件 main.js
内导入这个 less 文件即可:
import '@/assets/css/my-theme/index.less';