想在vite.config.js 裡面判斷一下環境,看看是不是開發環境,查了一下官網(https://cn.vitejs.dev/guide/env-and-mode.html),說是 可以使用 import.meta.env.DEV 。
但是在 vite.config.js 裡面直接寫 import.meta.env.DEV 的時候 ,執行時卻報錯了。
各種查了之後,發現要折騰一下。
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
const project = ({ mode }) => {
return defineConfig({
plugins: [vue()],
base: loadEnv(mode, process.cwd()).DEV ? './':'nf-rollup-webstorage',
})
}
export default project
這樣折騰之後,雖然不報錯了,但是 base 好像不太對勁的樣子。測試了一番之後發現,根本沒有讀取出來。
模式
又繼續看,發現了一個叫做“模式”的東東,簡單的說,我們可以在專案根目錄裡面設定 .env.xxx 的檔案,來存放不同模式的配置檔案。
既然這樣的話,乾脆就用模式的方式吧。
因為我的專案有三個模式:開發模式,生產模式,庫專案。
前兩個都是常規模式,只是base不一致,後面的庫專案,是因為想作為資源包發包釋出到npmjs.com裡面去。
修改 vite.config.js
首先建立三個檔案:.env、.env.project、.env.lib
分別寫入下面的內容,注意要分開寫。
VITE_BASEURL=./
VITE_BASEURL=lib
VITE_BASEURL=nf-rollup-webstorage
然後把vite.config.js改成這樣:
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path' // 主要用於alias檔案路徑別名
const pathResolve = (dir) => resolve(__dirname, '.', dir)
// 釋出庫的設定
const lib = defineConfig({
plugins: [vue()],
// 打包配置
build: {
lib: {
entry: resolve(__dirname, 'lib/main.js'),
name: 'nf-web-storage',
fileName: (format) => `nf-web-storage.${format}.js`
},
sourcemap: true,
rollupOptions: {
// 確保外部化處理那些你不想打包進庫的依賴
external: ['vue', 'nf-tool'],
output: {
// 在 UMD 構建模式下為這些外部化的依賴提供一個全域性變數
globals: {
vue: 'Vue',
'nf-tool': 'nfTool'
}
}
}
}
})
// 開發模式、生產模式
const project = (url) => {
return defineConfig({
plugins: [vue()],
devtools: true,
resolve: {
alias: {
'/@': resolve(__dirname, '.', 'src'),
'/nf-web-storage': pathResolve('lib/main.js') //
}
},
base: url,
// 打包配置
build: {
sourcemap: true,
outDir: 'distp', //指定輸出路徑
assetsDir: 'static/img/', // 指定生成靜態資源的存放路徑
rollupOptions: {
output: {
chunkFileNames: 'static/js1/[name]-[hash].js',
entryFileNames: 'static/js2/[name]-[hash].js',
assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
},
brotliSize: false, // 不統計
target: 'esnext',
minify: 'esbuild' // 混淆器,terser構建後檔案體積更小
}
}
})
}
// 判斷型別,返回對應的 defineConfig
export default ({ mode }) => {
const url = loadEnv(mode, process.cwd()).VITE_BASEURL
switch (url) {
case 'lib': // 打包庫檔案
return lib
break;
default: // 開發模式、生產模式
return project(url)
break;
}
}
修改 package.json
模式和 vite.config.js 都設定好了,那麼如何使用呢?我們需要改一下 package.json 的 script
"scripts": {
"dev": "vite",
"build": "vite build --mode project",
"lib": "vite build --mode lib",
"serve": "vite preview"
}
然後輸入對應命令即可。
yarn dev // 開發模式
yarn build // 釋出專案
yarn lib // 釋出庫
以前各種改 vite.config.js ,現在就不用改檔案了。