上篇文章我们对比了 Vite 与 Webpack 的差异。接下来,准备将项目中用到的 Webpack 5.0 替换为 Vite 2.0 ,我们先着手从零配置开发/生产环境。
一、初始化
-
1. 初始化 package.json
npm init // 一路回车
-
2. 安装 Vite (node 版本要求 14.18 + )
yarn add vite --dev 或者 npm install vite -D
-
3. 初始化项目 初始化目录结构 config/vite.config.js 配置文件、index.html 出口文件、index.js 入口文件、src 目录源码 因为 Vite 是基于 ESM 通过 HTTP 请求获取所需的文件,所以入口的 index.js 要注意:
- 1.
type 为 module - 2.
src 路径要用绝对路径 -
4. 配置打包命令 package.json :这里的 --open 指的打开窗口,-c 指的使用自定义的配置,-m 指定环境 development 或者 production "scripts": {
"dev": "vite -c ./config/vite.config.js -m development --open",
"build": "vite -c ./config/vite.config.js -m production"
}
查看更多配置: npx vite --help
二、配置
-
1. 基础配置 配置过 wepback 的同学,相信看到这份配置并不陌生,相比 webpack ,配置简化很多。还不会 webpack 配置的同学建议先熟悉 webpack 的配置。点击进入:Webpack 4.X 从零配置SPA单页应用 import { defineConfig } from 'vite'
import { resolve } from 'path'
export default defineConfig({
root: process.cwd(),
base: '/',
publicDir: 'public',
cacheDir: 'node_modules/.vite',
resolve: {
alias: {
'@': resolve(__dirname, '../src'),
'pages': resolve(__dirname, '../src/pages')
},
extensions: ['.js', '.vue', '.json']
}
})
到这里开发环境就可以跑起来,因为 Vite 帮我们配置了默认的 dev server ,直接执行 npm run dev ,发现报错,缺少 esbuild 依赖,安装依赖 npm install esbuild-windows-64 -D 安装成功后,重新执行 npm run dev ,启动成功,因为这里使用默认的配置,为了方便拓展,我们这里要重新配置 dev server -
2. 配置开发环境 server: {
host: '0.0.0.0',
port: 3000,
open: true,
strictPort: false,
force: true,
proxy: proxyConfig
}
export default {
'/api': {
target: 'http://xxx.com',
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, '')
},
'/socket.io': {
target: 'ws://localhost:3000',
ws: true
}
}
-
3. 配置 CSS 预处理器以及前缀 如果使用 sass ,无需下载 node-sass 、 sass-loader 包, 直接安装 sass ,这里我们使用 less ,直接下载 less
npm i less autoprefixer postcss -D
- 配置
less 预处理器import { resolve } from 'path'
export default defineConfig({
...
css: {
preprocessorOptions: {
less: {
additionalData: `@import "${resolve(__dirname, '../src/assets/css/common.less')}";`,
javascriptEnabled: true
}
},
devSourcemap: true,
}
})
- 配置
autoprefixer 前缀自动补全 postcss.config :配置 autoprefixer module.exports = {
"plugins": {
"autoprefixer": {},
}
}
package.json 配置兼容处理{
"browserslist": [
"defaults",
"not ie < 11",
"last 2 versions",
"> 1%",
"iOS 7",
"last 3 iOS versions"
]
}
配置完毕后,我们看下效果,生效 -
4. 配置 vue 3.0 开发环境
-
4.1 安装依赖
1、安装 vue 环境:npm i vue -D 或者 yarn add vue --dev 2、安装 vue plugin :npm i @vitejs/plugin-vue -D 或者 yarn add @vitejs/plugin-vue --dev
-
4.2 配置 vue 环境 vite.config.js :vite 配置 import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [
vue()
]
})
index.js :入口文件 import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.mount('#root')
App.vue :父组件 <template>
<div class="container">
{{ num }}
</div>
</template>
<script>
import { ref, onBeforeMount } from 'vue'
export default {
setup() {
let num = ref(0)
onBeforeMount(_ => {
console.log(num.value)
})
return { num }
}
}
</script>
<style lang="less">
.app {
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif !important;
font-size: 16px;
user-select: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
box-sizing: border-box !important;
-webkit-backface-visibility: hidden;
-webkit-tap-highlight-color: transparent;
scroll-behavior: smooth;
transform: translateZ(0);
}
</style>
跑起来试试,npm run dev ,完美 -
4.3 配置 vue-router 路由
npm i vue-router@4 -S
router/index.js 路由配置,这里要路由模式参数为 history 而非 mode ,可以从去源码查看他的参数 import { createRouter, createWebHashHistory } from 'vue-router'
const Home = () => import('../pages/home')
const routes = [
{
path: '/',
redirect: {
path: '/Home'
}
},
{
path: '/Home',
name: 'Home',
component: Home
}
]
export default createRouter({
history: createWebHashHistory(),
routes,
})
-
4.4 配置 vuex 状态管理
npm i vuex@next -S
store/index.js :状态管理模块,新版本的内置了 createLogger ,直接引入即可 import { createStore, createLogger } from 'vuex'
import app from './module/app'
export default createStore({
modules: {
app
},
plugins: [ createLogger ],
strict: true
})
home.vue :单个路由组件使用 <template>
<div>Home</div>
</template>
<script>
import { ref, onMounted } from 'vue'
import { useStore } from 'vuex'
export default {
setup() {
let store = useStore()
onMounted(_ => {
store.dispatch('_getConfig', { mode: 'T' })
})
return { store }
}
}
</script>
-
4.5 配置 element 组件库
npm install element-plus -S
!!! 安装时,可能会报以下错误,这个查阅是 esbuild 的 bug ,处理方法:当前目录下执行:node ./node_modules/esbuild/install.js 执行命令后,再次下载,完美解决 index.js :引入使用,这里一定要注意顺序,先加载插件,再去挂载 import { createApp } from 'vue'
import element from 'element-plus'
import '@/assets/css/index.css'
import App from './App'
const app = createApp(App)
app.use(element)
app.mount('#root')
-
三、结束 至此,一个简单实用的 vite + vue 3.0 工程基本搭建完毕,之后会添加 eslint 代码规范、 vuex hooks 集成、cdn 加载、Typescript 环境等 -
四、相关文章
|