Vue項目中env文件的作用和配置詳解
在實際項目的開發(fā)中,我們一般會經(jīng)歷項目的開發(fā)階段、測試階段和最終上線階段,每一個階段對于項目代碼的要求可能都不盡相同,那么我們?nèi)绾文軌蛴稳杏杏嗟脑诓煌A段下使我們的項目呈現(xiàn)不同的效果,使用不同的功能呢?這里就需要引入環(huán)境的概念。
一般一個項目都會有以下 3 種環(huán)境:
開發(fā)環(huán)境(開發(fā)階段,本地開發(fā)版本,一般會使用一些調(diào)試工具或額外的輔助功能)
測試環(huán)境(測試階段,上線前版本,除了一些 bug 的修復,基本不會和上線版本有很大差別)
生產(chǎn)環(huán)境(上線階段,正式對外發(fā)布的版本,一般會進行優(yōu)化,關(guān)掉錯誤報告)
作為一名開發(fā)人員,我們可能需要針對每一種環(huán)境編寫一些不同的代碼并且保證這些代碼運行在正確的環(huán)境中,那么我們應(yīng)該如何在代碼中判斷項目所處的環(huán)境同時執(zhí)行不同的代碼呢?這就需要我們進行正確的環(huán)境配置和管理。
1. 配置文件
正確的配置環(huán)境首先需要我們認識不同環(huán)境配置之間的關(guān)系,如圖所示:
我們從上圖中可以了解到每一個環(huán)境其實有其不同的配置,同時它們也存在著交集部分,交集便是它們都共有的配置項,那么在 Vue 中我們應(yīng)該如何處理呢?
我們可以在根目錄下創(chuàng)建以下形式的文件進行不同環(huán)境下變量的配置:
.env # 在所有的環(huán)境中被載入 .env.local # 在所有的環(huán)境中被載入,但會被 git 忽略 .env.[mode] # 只在指定的模式中被載入 .env.[mode].local # 只在指定的模式中被載入,但會被 git 忽略
比如我們創(chuàng)建一個名為 .env.stage 的文件,該文件表明其只在 stage 環(huán)境下被加載,在這個文件中,我們可以配置如下鍵值對的變量:
NODE_ENV=stage VUE_APP_TITLE=stage mode
注意:環(huán)境變量的名稱必須以 VUE_APP_ 開頭
這時候我們怎么在 vue.config.js 中訪問這些變量呢?很簡單,使用 process.env.[name] 進行訪問就可以了,比如:
// vue.config.js console.log(process.env.NODE_ENV); // development(在終端輸出)
當你運行 yarn serve 命令后會發(fā)現(xiàn)輸出的是 development,因為 vue-cli-service serve 命令默認設(shè)置的環(huán)境是 development,你需要修改 package.json 中的 serve 腳本的命令為:
"scripts": {
"serve": "vue-cli-service serve --mode stage",
}--mode stage 其實就是修改了 webpack 4 中的 mode 配置項為 stage,同時其會讀取對應(yīng) .env.[model] 文件下的配置,如果沒找到對應(yīng)配置文件,其會使用默認環(huán)境 development,同樣 vue-cli-service build 會使用默認環(huán)境 production。
這時候如果你再創(chuàng)建一個 .env 的文件,再次配置重復的變量,但是值不同,如:
NODE_ENV=staging VUE_APP_TITLE=staging mode VUE_APP_NAME=project
因為 .env 文件會被所有環(huán)境加載,即公共配置,那么最終我們運行 vue-cli-service serve 打印出來的是哪個呢?答案是 stage,但是如果是 .env.stage.local 文件中配置成上方這樣,答案便是 staging,所以 .env.[mode].local 會覆蓋 .env.[mode] 下的相同配置。同理 .env.local 會覆蓋 .env 下的相同配置。
由此可以得出結(jié)論,相同配置項的權(quán)重:
.env.[mode].local > .env.[mode] > .env.local > .env
如果看完上例還未理解優(yōu)先級和覆蓋規(guī)則的關(guān)系的話,這里有一個更容易理解的例子:
當你運行 vue-cli-service serve 命令時,Vue CLI 會根據(jù)你指定的模式(如 --mode stage)加載不同的環(huán)境變量文件。以下是常見的環(huán)境變量文件及其優(yōu)先級:
.env.local: 該文件用于本地環(huán)境的配置,優(yōu)先級最高,適用于所有模式。如果在該文件中定義了環(huán)境變量,它們將覆蓋其他文件中的同名變量。.env.[mode].local: 這是特定于某個模式的本地配置文件,如.env.stage.local。它的優(yōu)先級僅次于.env.local,并且可以覆蓋.env.[mode]中的相同變量。.env.[mode]: 這是特定于某個模式的環(huán)境變量文件,例如.env.stage。它包含該模式下的公共配置。.env: 這是一個通用的環(huán)境變量文件,適用于所有模式。它的優(yōu)先級最低。
實際效果
如果沒有定義
.env.local或.env.stage.local:- 當你運行
vue-cli-service serve --mode stage時,Vue CLI 會加載的環(huán)境變量是來自.env,.env.stage,結(jié)果將是.env.stage中的變量。
- 當你運行
如果定義了
.env.stage.local:- 如果你在
.env.stage.local中定義了某些變量,這些變量將覆蓋.env.stage中的同名變量。例如,如果你在.env.stage.local中定義VUE_APP_TITLE=Staging,而在.env.stage中定義了VUE_APP_TITLE=Stage App,那么最終在應(yīng)用中訪問process.env.VUE_APP_TITLE時,將會得到Staging。
- 如果你在
示例
假設(shè)你的文件結(jié)構(gòu)如下:
project-root/ │ ├── .env │ VUE_APP_TITLE=My Vue App │ ├── .env.stage │ VUE_APP_TITLE=Stage App │ ├── .env.stage.local │ VUE_APP_TITLE=Staging
執(zhí)行命令
當你運行以下命令時:
npm run serve -- --mode stage
最終結(jié)果
process.env.VUE_APP_TITLE的值將是Staging,因為它是從.env.stage.local加載的,并覆蓋了.env.stage和.env文件中的同名變量。
需要注意的是,除了相同配置項權(quán)重大的覆蓋小的,不同配置項它們會進行合并操作,類似于 Javascript 中的 Object.assign 的用法。
拓展1
1.為什么使用 VUE_APP_ 前綴?
在 Vue.js 中,環(huán)境變量以 VUE_APP_ 前綴開頭是特別重要的。這是因為 Vue CLI 僅會將以 VUE_APP_ 開頭的環(huán)境變量暴露給客戶端的 JavaScript 代碼。它的主要目的是為了區(qū)分環(huán)境變量,使得這些變量能夠被 Vue 應(yīng)用程序訪問,同時避免與其他環(huán)境變量的沖突
1. 明確標識
VUE_APP_前綴清楚地標識這些變量是特定于 Vue 應(yīng)用的環(huán)境變量。這有助于開發(fā)者快速識別哪些變量是可以在 Vue 組件和其他代碼中直接使用的。
2. 隔離命名空間
- 在同一個項目中,可能會有多個不同的工具、庫或模塊,它們也可能定義環(huán)境變量。通過使用
VUE_APP_前綴,Vue 應(yīng)用的環(huán)境變量就被隔離在一個命名空間下,從而減少命名沖突的可能性。例如,其他工具可能使用NODE_ENV、API_URL等變量名,但由于 Vue 的環(huán)境變量使用了特定前綴,就能避免混淆。
3. 安全性
- 在 Vue CLI 中,只有以
VUE_APP_前綴開頭的環(huán)境變量會被嵌入到構(gòu)建的應(yīng)用中,其他的環(huán)境變量則不會被暴露到客戶端。這意味著,如果你在環(huán)境變量中定義了敏感信息(比如數(shù)據(jù)庫密碼),只需確保這些變量不以VUE_APP_開頭,它們就不會被打包和暴露,從而提高了安全性。
4. 一致性
- 使用統(tǒng)一的前綴可以為團隊開發(fā)提供一致的命名約定,有助于代碼的可讀性和可維護性。團隊中的每個成員都知道哪些環(huán)境變量是可用的,以及它們的作用,從而減少了溝通成本。
5. 便于配置
- 在不同的環(huán)境(如開發(fā)、測試、生產(chǎn)環(huán)境)中,你可以使用相同的命名約定來配置不同的值。只需在不同的
.env文件中設(shè)置相應(yīng)的值(如.env.development、.env.production),即可在構(gòu)建時自動加載正確的環(huán)境變量。
這里用一個例子說明:
在一個 Vue 應(yīng)用中,你可能會看到以下環(huán)境變量的定義:
# .env.development VUE_APP_TITLE=My Development App VUE_APP_API_URL=https://dev.api.example.com # .env.production VUE_APP_TITLE=My Production App VUE_APP_API_URL=https://api.example.com
這些變量在 Vue 組件中可以直接使用,比如:
console.log(process.env.VUE_APP_TITLE); // 輸出 "My Development App" 或 "My Production App" console.log(process.env.VUE_APP_API_URL); // 輸出相應(yīng)環(huán)境下的 API URL
2.APP 后綴的作用
1. 明確變量的作用
APP后綴清晰地表明變量與應(yīng)用程序的配置相關(guān)。這使得其他開發(fā)者在查看變量名時,可以迅速理解該變量的目的和使用場景。例如:VUE_APP_TITLE:應(yīng)用的標題。VUE_APP_API_URL:API 的基本 URL。VUE_DB_CONNECTION_STRING:數(shù)據(jù)庫連接字符串。
2. 減少命名沖突
- 在大型項目中,可能會有多個不同模塊或組件,每個模塊可能都有自己的環(huán)境變量。如果每個模塊都遵循相似的命名規(guī)則,你就可以有效地避免變量名的沖突。例如:
- 模塊 A:
VUE_APP_MODULE_A_SETTING - 模塊 B:
VUE_APP_MODULE_B_SETTING
- 模塊 A:
3. 提高可維護性
- 維護代碼時,開發(fā)者可以更容易地識別和理解環(huán)境變量的來源和用途。尤其在團隊協(xié)作中,這種清晰性可以顯著減少溝通成本。
4. 便于環(huán)境切換
- 在某些情況下,可能需要為開發(fā)、測試和生產(chǎn)環(huán)境設(shè)置不同的變量。通過統(tǒng)一的命名約定,可以更方便地管理這些不同的環(huán)境變量。例如,開發(fā)環(huán)境可以使用
VUE_APP_DEV_TITLE,而生產(chǎn)環(huán)境則可以使用VUE_APP_PROD_TITLE。
5. 文檔化和標準化
- 在項目文檔中,清晰的命名約定可以作為標準操作程序的一部分,幫助新加入的開發(fā)者快速上手。文檔中可以列出所有環(huán)境變量及其用途,形成良好的開發(fā)規(guī)范。
6. 版本控制和部署
- 在持續(xù)集成和持續(xù)部署(CI/CD)過程中,使用
APP后綴可以幫助開發(fā)者快速識別與應(yīng)用相關(guān)的配置,確保在不同環(huán)境下正確使用相應(yīng)的變量。例如,你可以在不同的環(huán)境配置文件中定義各自的APP相關(guān)變量,以便于版本控制和自動化部署。
示例:
假設(shè)你正在開發(fā)一個 Vue 應(yīng)用,其中需要配置多個環(huán)境變量,可以使用 APP 后綴來組織它們:
# 應(yīng)用基本設(shè)置 VUE_APP_TITLE=My Awesome App VUE_APP_VERSION=1.0.0 # API 配置 VUE_APP_API_URL=https://api.example.com VUE_APP_API_TIMEOUT=5000 # 用戶設(shè)置 VUE_APP_USER_DEFAULT_LANGUAGE=en VUE_APP_USER_ENABLE_NOTIFICATIONS=true
2. 環(huán)境注入
通過上述配置文件的創(chuàng)建,我們成功使用命令行的形式對項目環(huán)境進行了設(shè)置并可以自由切換,但是需要注意的是我們在 Vue 的前端代碼中打印出的 process.env 與 vue.config.js 中輸出的可能是不一樣的,這需要普及一個知識點:webpack 通過 DefinePlugin 內(nèi)置插件將 process.env 注入到客戶端代碼中。
// webpack 配置
{
...
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(process.env.NODE_ENV)
}
}),
],
...
}由于 vue-cli 3.x 封裝的 webpack 配置中已經(jīng)幫我們完成了這個功能,所以我們可以直接在客戶端代碼中打印出 process.env 的值,該對象可以包含多個鍵值對,也就是說可以注入多個值,但是經(jīng)過 CLI 封裝后僅支持注入環(huán)境配置文件中以 VUE_APP_ 開頭的變量,而 NODE_ENV 和 BASE_URL 這兩個特殊變量除外。比如我們在權(quán)重最高的 .env.stage.local 文件中寫入:
NODE_ENV=stage2 VUE_APP_TITLE=stage mode2 NAME=vue
然后我們嘗試在 vue.config.js 中打印 process.env,終端輸出:
{
...
npm_config_ignore_scripts: '',
npm_config_version_git_sign: '',
npm_config_ignore_optional: '',
npm_config_init_version: '1.0.0',
npm_package_dependencies_vue_router: '^3.0.1',
npm_config_version_tag_prefix: 'v',
npm_node_execpath: '/usr/local/bin/node',
NODE_ENV: 'stage2',
VUE_APP_TITLE: 'stage mode2',
NAME: 'vue',
BABEL_ENV: 'development',
...
}可以看到輸出內(nèi)容除了我們環(huán)境配置中的變量外還包含了很多 npm 的信息,但是我們在入口文件 main.js 中打印會發(fā)現(xiàn)輸出:
{
"BASE_URL": "/vue/",
"NODE_ENV": "stage2",
"VUE_APP_TITLE": "stage mode2"
}可見注入時過濾調(diào)了非 VUE_APP_ 開頭的變量,其中多出的 BASE_URL 為你在 vue.config.js 設(shè)置的值,默認為 /,其在環(huán)境配置文件中設(shè)置無效。
拓展2
DefinePlugin插件
DefinePlugin 是 Webpack 提供的一個插件,用于在編譯時創(chuàng)建一個全局常量,并替換代碼中的變量。這在處理環(huán)境變量和配置時非常有用,因為它允許你在客戶端代碼中使用不同的值,而這些值在編譯時就已經(jīng)確定了。
主要作用
- 定義全局常量:可以在代碼中使用的全局變量,通過替換的方式來提供。
- 環(huán)境變量替換:常用于替換
process.env.NODE_ENV,以便于在開發(fā)和生產(chǎn)環(huán)境中使用不同的配置。
基本用法
在 Webpack 配置文件中,你可以這樣使用 DefinePlugin:
const webpack = require('webpack');
module.exports = {
// 其他配置...
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
'API_URL': JSON.stringify('https://api.example.com'),
// 可以定義更多的環(huán)境變量
})
]
};詳細說明
創(chuàng)建全局常量: 你可以通過
DefinePlugin創(chuàng)建任何你想要的全局常量。例如,在上面的示例中,API_URL被定義為一個字符串。在代碼其他地方,你可以直接使用API_URL,Webpack 會在編譯時將其替換為對應(yīng)的字符串。字符串化: 注意當定義常量時,通常需要使用
JSON.stringify來確保常量在代碼中是一個有效的 JavaScript 字符串。如果直接使用字符串,可能會導致語法錯誤。環(huán)境變量: 在許多項目中,
process.env.NODE_ENV是一個常見的用法。在開發(fā)環(huán)境下,它通常設(shè)置為'development',而在生產(chǎn)環(huán)境下則為'production'。通過這種方式,你可以在代碼中進行條件判斷,比如:
if (process.env.NODE_ENV === 'production') {
// 生產(chǎn)環(huán)境的代碼
} else {
// 開發(fā)環(huán)境的代碼
}與其他工具結(jié)合:
DefinePlugin通常與其他工具(如 Babel、Vue CLI 等)結(jié)合使用,以便在構(gòu)建過程中正確處理環(huán)境變量。
示例
假設(shè)你有以下代碼:
if (process.env.NODE_ENV === 'production') {
console.log('This is production mode');
} else {
console.log('This is development mode');
}在 Webpack 配置中使用 DefinePlugin:
const webpack = require('webpack');
module.exports = {
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
})
]
};在構(gòu)建應(yīng)用時,如果 NODE_ENV 為 'production',Webpack 會將代碼中的 process.env.NODE_ENV 替換為 'production',這樣在運行時就只會執(zhí)行生產(chǎn)環(huán)境的代碼。
3. 額外配置
以上我們通過新建配置文件的方式為項目不同環(huán)境配置不同的變量值,能夠?qū)崿F(xiàn)項目基本的環(huán)境管理,但是 .env 這樣的配置文件中的參數(shù)目前只支持靜態(tài)值,無法使用動態(tài)參數(shù),在某些情況下無法實現(xiàn)特定需求,這時候我們可以在根目錄下新建 config 文件夾用于存放一些額外的配置文件。
/* 配置文件 index.js */
// 公共變量
const com = {
IP: JSON.stringify('xxx')
};
module.exports = {
// 開發(fā)環(huán)境變量
dev: {
env: {
TYPE: JSON.stringify('dev'),
...com
}
},
// 生產(chǎn)環(huán)境變量
build: {
env: {
TYPE: JSON.stringify('prod'),
...com
}
}
}上方代碼我們把環(huán)境變量分為了公共變量、開發(fā)環(huán)境變量和生產(chǎn)環(huán)境變量,當然這些變量可能是動態(tài)的,比如用戶的 ip 等?,F(xiàn)在我們要在 vue.config.js 里注入這些變量,我們可以使用 chainWebpack 修改 DefinePlugin 中的值:
/* vue.config.js */
//從 config.js 文件中導入不同環(huán)境配置
const configs = require('./config');
// 引入 webpack-merge 庫,用于合并不同的 Webpack 配置對象。這樣可以靈活地組合不同的配置,而不丟失原有的配置。
const merge = require('webpack-merge');
// 根據(jù)環(huán)境判斷使用哪份配置
const cfg = process.env.NODE_ENV === 'production' ? configs.build.env : configs.dev.env;
module.exports = {
...
chainWebpack: config => {
//plugin('define')訪問 Webpack 中 DefinePlugin 插件通過修改這個插件的配置,可以更改全局變量的值
config.plugin('define')
.tap(args => {
let name = 'process.env';
// 使用 merge方法將 原有的process.env 和根據(jù)環(huán)境選擇的 cfg 進行合并這樣可以確保
在原有的環(huán)境變量基礎(chǔ)上添加新的變量,而不覆蓋原有的值。
args[0][name] = merge(args[0][name], cfg);
return args
})
},
...
}args[0][name] = merge(args[0][name], cfg);
args[0]: 這個數(shù)組的第一個元素是傳遞給DefinePlugin的配置對象。merge(args[0][name], cfg): 這里的merge函數(shù)用于將當前的process.env對象與cfg進行合并。- 合并: 將
cfg中的環(huán)境變量添加到現(xiàn)有的process.env對象中,確保在編譯時可以訪問這些變量。
最后我們可以在客戶端成功打印出包含動態(tài)配置的對象:
{
"NODE_ENV": "stage2",
"VUE_APP_TITLE": "stage mode2",
"BASE_URL": "/vue/",
"TYPE": "dev",
"IP": "xxx"
}4. 實際場景
結(jié)合以上環(huán)境變量的配置,我們項目中一般會遇到一些實際場景: 比如在非線上環(huán)境我們可以給自己的移動端項目開啟 vConsole 調(diào)試,但是在線上環(huán)境肯定不需要開啟這一功能,我們可以在入口文件中進行設(shè)置,代碼如下:
/* main.js */
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
// 如果是非正式環(huán)境,加載 VConsole
if (process.env.NODE_ENV !== 'production') {
var VConsole = require('vconsole/dist/vconsole.min.js');
var vConsole = new VConsole();
}
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')vConsole 是一款用于移動網(wǎng)頁的輕量級,可擴展的前端開發(fā)工具,可以看作是移動端瀏覽器的控制臺。
另外我們還可以使用配置中的 BASE_URL 來設(shè)置路由的 base 參數(shù):
/* router.js */
import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import About from './views/About.vue'
Vue.use(Router)
let base = `${process.env.BASE_URL}`; // 獲取二級目錄
export default new Router({
mode: 'history',
base: base, // 設(shè)置 base 值
routes: [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/about',
name: 'about',
component: About
}
]
})每一個環(huán)境變量你都可以用于項目的一些地方,它提供給了我們一種全局的可訪問形式,也是基于 Node 開發(fā)的特性所在。
拓展3
1.webpack 通過 DefinePlugin 內(nèi)置插件將 process.env 注入到客戶端代碼中時,`process.env.NODE_ENV` 為什么要進行 JSON.stringify 處理?
原因分析
JavaScript 語法: 當你在 JavaScript 代碼中使用字符串時,這些字符串必須被正確地包裹在引號中。例如,
"production"或者"development"必須是字符串類型。而DefinePlugin允許我們在編譯時定義全局常量,如果不使用JSON.stringify,將會導致生成的代碼不符合 JavaScript 語法。
// 如果沒有 JSON.stringify,可能會變成這樣 process.env.NODE_ENV === production // 這里的 production 會被認為是一個變量 // 正確的寫法應(yīng)該是 process.env.NODE_ENV === 'production' // 這里的 'production' 是一個字符串
確保類型一致性:
JSON.stringify可以確保傳遞給DefinePlugin的值在任何情況下都是字符串。即使process.env.NODE_ENV的值為undefined或者其他類型(如數(shù)字),JSON.stringify也會將其轉(zhuǎn)換為字符串格式,并避免潛在的類型錯誤。防止意外的值: 如果你直接將某個變量(例如
process.env.NODE_ENV)傳遞給DefinePlugin,而這個變量在某些情況下可能是未定義的或不符合預期的類型,直接使用可能導致運行時錯誤或邏輯錯誤。通過JSON.stringify,你可以確保一切都是嚴格的字符串,從而避免這些問題。
示例
下面是一個簡單的示例來展示沒有 JSON.stringify 的可能后果:
const webpack = require('webpack');
module.exports = {
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': process.env.NODE_ENV || 'development' // 沒有字符串化
})
]
};
// 結(jié)果可能是:
if (process.env.NODE_ENV === production) {
// 這里會報錯,因為 production 沒有被定義為字符串
}而使用 JSON.stringify 的情況下:
const webpack = require('webpack');
module.exports = {
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development') // 使用字符串化
})
]
};
// 結(jié)果是:
if (process.env.NODE_ENV === 'production') {
// 這里是正確的,邏輯不會出錯
}總結(jié)
使用 JSON.stringify 在 DefinePlugin 中確保 process.env.NODE_ENV 被定義為一個合法的字符串,從而避免了潛在的語法錯誤和運行時錯誤。這是一個好的實踐,確保你在客戶端代碼中處理常量時的安全性和一致性。
2.如何在 package.json 中的 scripts 字段中定義一些自定義腳本來切換不同的環(huán)境?
假設(shè)你有一個 Node.js 項目,并且希望根據(jù)不同的環(huán)境(如開發(fā)、測試和生產(chǎn))來執(zhí)行不同的腳本。你可以在 package.json 中定義如下腳本:
{
"name": "your-project",
"version": "1.0.0",
"scripts": {
"start": "NODE_ENV=production node server.js",
"dev": "NODE_ENV=development nodemon server.js",
"test": "NODE_ENV=test mocha",
"build": "webpack --mode production",
"build:dev": "webpack --mode development"
}
}start: 用于生產(chǎn)環(huán)境啟動應(yīng)用,將NODE_ENV設(shè)置為production。在 Unix 系統(tǒng)中,環(huán)境變量可以通過KEY=value command的方式設(shè)置。dev: 用于開發(fā)環(huán)境啟動應(yīng)用,將NODE_ENV設(shè)置為development。這里使用了nodemon,它會自動重啟 Node.js 應(yīng)用程序。test: 用于測試環(huán)境,運行測試框架(如 Mocha),將NODE_ENV設(shè)置為test。build和build:dev: 分別用于構(gòu)建生產(chǎn)和開發(fā)版本,使用 Webpack 進行打包。
Windows 兼容性
在 Windows 上,設(shè)置環(huán)境變量的方式與 Unix 系統(tǒng)不同。為了確保你的腳本在不同操作系統(tǒng)上都能正常工作,你可以使用 cross-env 包。首先,你需要安裝 cross-env:
npm install --save-dev cross-env
然后修改 package.json 中的腳本如下:
{
"name": "your-project",
"version": "1.0.0",
"scripts": {
"start": "cross-env NODE_ENV=production node server.js",
"dev": "cross-env NODE_ENV=development nodemon server.js",
"test": "cross-env NODE_ENV=test mocha",
"build": "webpack --mode production",
"build:dev": "webpack --mode development"
}
}運行腳本
可以使用以下命令來運行不同的腳本:
- 啟動生產(chǎn)環(huán)境:
npm start - 啟動開發(fā)環(huán)境:
npm run dev - 運行測試:
npm test - 構(gòu)建生產(chǎn)版本:
npm run build - 構(gòu)建開發(fā)版本:
npm run build:dev
以上就是Vue項目中env文件的作用和配置詳解的詳細內(nèi)容,更多關(guān)于Vue env文件作用和配置的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解vuex持久化插件解決瀏覽器刷新數(shù)據(jù)消失問題
這篇文章主要介紹了詳解vuex持久化插件解決瀏覽器刷新數(shù)據(jù)消失問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
關(guān)于Vue?CLI3中啟動cli服務(wù)參數(shù)說明
這篇文章主要介紹了關(guān)于Vue?CLI3中啟動cli服務(wù)參數(shù)說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04
Vue-cli assets SubDirectory及PublicPath區(qū)別詳解
這篇文章主要介紹了Vue-cli assets SubDirectory及PublicPath區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
vue element-ui el-cascader級聯(lián)選擇器數(shù)據(jù)回顯的兩種實現(xiàn)方法
這篇文章主要介紹了vue element-ui el-cascader級聯(lián)選擇器數(shù)據(jù)回顯的兩種實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。2023-07-07
Vue分別運用class綁定和style綁定通過點擊實現(xiàn)樣式切換
這篇文章主要為大家介紹了Vue分別運用class綁定和style綁定通過點擊實現(xiàn)樣式切換,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
vue開發(fā)中數(shù)據(jù)更新但視圖不刷新的解決方法
在開發(fā)中我們處理數(shù)據(jù)時會遇到數(shù)據(jù)更新了,但視圖并沒有更新,這種情況往往是數(shù)據(jù)嵌套層數(shù)過多導致的問題,下面這篇文章主要給大家介紹了關(guān)于vue開發(fā)中數(shù)據(jù)更新但視圖不刷新的解決方法,需要的朋友可以參考下2022-11-11

