日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue CLI中模式與環境變量的深入詳解

瀏覽:127日期:2022-09-29 10:43:23
前言

在實際項目的開發中,我們一般會經歷項目的開發階段、測試階段和最終上線階段,每一個階段對于項目代碼的要求可能都不盡相同,那么我們如何能夠游刃有余的在不同階段下使我們的項目呈現不同的效果,使用不同的功能呢?這里就需要引入環境的概念。官方文檔中模式和環境變量說明

一般一個項目都會有以下 3 種環境:

開發環境(開發階段,本地開發版本,一般會使用一些調試工具或額外的輔助功能); 測試環境(測試階段,上線前版本,除了一些 bug 的修復,基本不會和上線版本有很大差別); 生產環境(上線階段,正式對外發布的版本,一般會進行優化,關掉錯誤報告);

作為一名開發人員,我們可能需要針對每一種環境編寫一些不同的代碼并且保證這些代碼運行在正確的環境中,那么我們應該如何在代碼中判斷項目所處的環境同時執行不同的代碼呢?這就需要我們進行正確的環境配置和管理。

1. 配置文件

正確的配置環境首先需要我們認識不同環境配置之間的關系,如圖所示:

Vue CLI中模式與環境變量的深入詳解

我們從上圖中可以了解到每一個環境其實有其不同的配置,同時它們也存在著交集部分,交集便是它們都共有的配置項,那么在 Vue 中我們應該如何處理呢?

我們可以在根目錄下創建以下形式的文件進行不同環境下變量的配置:

.env# 在所有的環境中被載入.env.local # 在所有的環境中被載入,但會被 git 忽略.env.[mode] # 只在指定的模式中被載入, 如:.env.development,.env.production .env.[mode].local # 只在指定的模式中被載入,但會被 git 忽略

Vue CLI中模式與環境變量的深入詳解

Vue CLI中模式與環境變量的深入詳解

如:創建一個名為 .env.development 的文件,該文件表明其只在 development 環境下被加載。

在這個文件中,我們可以配置如下鍵值對的變量:

# 開發環境配置NODE_ENV=developmentVUE_APP_API_BASE_URL=https://www.baidu.com/

這時怎么在 vue.config.js 中訪問這些變量呢?使用 process.env.[name] 進行訪問就可以了。

// vue.config.jsconsole.log(process.env.NODE_ENV); // development(在終端輸出)

當運行 npm run serve 命令后會發現輸出的是 development,因為 vue-cli-service serve 命令 默認設置的環境就是 development。

如果我們需要修改,可將 package.json 中的 serve 腳本的命令為:

// package.json'scripts': { 'serve': 'vue-cli-service serve --mode stage',},

?mode stage 其實就是修改了 webpack 4 中的 mode 配置項為 stage,同時其會讀取對應 .env.[model] 文件下的配置。如果沒找到對應配置文件,其會使用默認環境 development,同樣 vue-cli-service build 會使用默認環境 production。

如果再創建一個 .env 的文件,再次配置重復的變量,但是值不同。

# 環境配置NODE_ENV=ENVVUE_APP_API_BASE_URL=http://www.soso.com/

因為 .env 文件會被所有環境加載,即公共配置,那么最終運行 vue-cli-service serve 打印出來的是哪個呢?

答案是 development。

但是如果是 .env.development.local 文件中配置成上方這樣,答案便是 ENV。

所以 .env.[mode].local 會覆蓋 .env.[mode] 下的相同配置。

同理 .env.local 會覆蓋 .env 下的相同配置。

由此可以得出結論,相同配置項的權重:.env.[mode].local > .env.[mode] > .env.local > .env注意: 除了相同配置項權重大的覆蓋小的,不同配置項它們會進行合并操作,類似于 Javascript 中的 Object.assign 的用法。

2. 環境注入

通過上述配置文件的創建,我們成功地使用命令行的形式對項目環境進行了設置并可以自由切換,但是注意:在 Vue 的前端代碼中打印出的 process.env 與 vue.config.js 中輸出的可能是不一樣的,這需要普及一個知識點:webpack 通過 DefinePlugin 內置插件將 process.env 注入到客戶端代碼中。

// webpack 配置{ ... plugins: [new webpack.DefinePlugin({ ’process.env’: {NODE_ENV: JSON.stringify(process.env.NODE_ENV) }}), ], ...}

由于 vue-cli 3.x 封裝的 webpack 配置中已經幫我們完成了這個功能,所以可以直接在客戶端代碼中打印出 process.env 的值,該對象可以包含多個鍵值對,也就是說可以注入多個值,但是 經過 vue-cli 封裝后僅支持注入環境配置文件中以 VUE_APP_ 開頭的變量,而 NODE_ENV 和 BASE_URL 這兩個特殊變量除外。

比如:在權重最高的 .env.development.local 文件中寫入:

# 開發環境配置NODE_ENV=developmentLocalVUE_APP_API_BASE_URL=https://www.baidu.com/NAME=javaScript

然后我們嘗試在 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: ’developmentLocal’, VUE_APP_API_BASE_URL: ’https://www.baidu.com/’, NAME: ’javaScript’, BABEL_ENV: ’development’, ...}

可以看到輸出內容除了環境配置中的變量外還包含了很多 npm 的信息,但在入口文件 main.js 中打印會發現輸出:

{ BASE_URL: '/', NODE_ENV: 'developmentLocal', VUE_APP_API_BASE_URL: 'https://www.baidu.com/',}

可見注入時過濾調了非 VUE_APP_ 開頭的變量,其中多出的 BASE_URL 為你在 vue.config.js 設置的值,默認為 /,其在環境配置文件中設置無效。

Vue CLI中模式與環境變量的深入詳解

3. 額外配置

以上我們通過新建配置文件的方式為項目不同環境配置不同的變量值,能夠實現項目基本的環境管理,但是 .env 這樣的配置文件中的參數目前只支持靜態值,無法使用動態參數,在某些情況下無法實現特定需求。

這時候可以在根目錄下新建 config 文件夾用于存放一些額外的配置文件。

/* 配置文件 index.js */ // 公共變量const com = { IP: JSON.stringify(’xxx’)};module.exports = { // 開發環境變量 dev: { env: { TYPE: JSON.stringify(’dev’), ...com } }, // 生產環境變量 build: { env: { TYPE: JSON.stringify(’prod’), ...com } }}

以上代碼把環境變量分為了公共變量、開發環境變量和生產環境變量,當然這些變量可能是動態的,比如用戶的 ip 等。現在我們要在 vue.config.js 里注入這些變量,可以使用 chainWebpack 修改 DefinePlugin 中的值:

/* vue.config.js */const configs = require(’./config’); // 用于做相應的 merge 處理const merge = require(’webpack-merge’); // 根據環境判斷使用哪份配置const cfg = process.env.NODE_ENV === ’production’ ? configs.build.env : configs.dev.env;module.exports = { chainWebpack: config => { config.plugin(’define’).tap(args => { let name = ’process.env’; // 使用 merge 保證原始值不變 args[0][name] = merge(args[0][name], cfg); return args }) },}

最后可以在客戶端成功打印出包含動態配置的對象:

{ BASE_URL: '/', IP: 'xxx', NODE_ENV: 'developmentLocal', TYPE: 'dev', VUE_APP_API_BASE_URL: 'https://www.baidu.com/',}4. 實際場景

使用 process.env.xxx 來訪問屬性

<script>export default { data() { return { BASEURL:process.env, } }, mounted(){ console.log(this.BASEURL.VUE_APP_API_BASE_URL) // https://www.baidu.com/ }}</script>

// 創建 axios 實例const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url timeout: 5000})結語

環境的配置和管理對于項目的構建起到了至關重要的作用,通過給項目配置不同的環境不僅可以增加開發的靈活性、提高程序的拓展性,同時也有助于幫助我們去了解并分析項目在不同環境下的運行機制,建立全局觀念。

到此這篇關于Vue CLI中模式與環境變量的文章就介紹到這了,更多相關Vue CLI模式與環境變量內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久国产愉拍| 色一区二区三区| 欧美精选一区二区三区| 欧美日一区二区| 久久影视一区| 免费中文字幕日韩欧美| 综合欧美精品| 国产香蕉精品| 欧美国产美女| 亚洲午夜久久久久久尤物| 99国产一区| 亚洲一区二区三区免费在线观看| 六月婷婷一区| 欧美日韩亚洲一区二区三区在线| 国产极品嫩模在线观看91精品| 精品国产精品久久一区免费式| 国产videos久久| 性欧美69xoxoxoxo| 青草久久视频| 久久在线免费| 欧美性www| 91精品一区二区三区综合| 乱人伦精品视频在线观看| 欧美日本不卡高清| 久久一区二区中文字幕| 日韩国产精品久久久久久亚洲| 国产精品一线| 99国产精品视频免费观看一公开 | 日韩一区二区三区高清在线观看 | 久久亚洲国产精品一区二区| 日本免费一区二区视频| 高潮一区二区| 国产欧美啪啪| 一区视频在线| 五月天av在线| 国产精品色在线网站| 久久国产主播| 久久亚洲资源中文字| 亚洲欧洲av| 国产精品试看| 久久久夜精品| 天堂av在线| 国产成人精品一区二区三区视频| 亚洲字幕久久| 美女尤物久久精品| 91精品一区国产高清在线gif| 麻豆极品一区二区三区| 日韩久久99| 最新亚洲国产| 中文字幕av一区二区三区四区| 亚洲福利一区| 国产盗摄——sm在线视频| 国产精品.xx视频.xxtv| 国产欧美二区| 日韩精品乱码av一区二区| 欧美一区二区三区激情视频| 成人在线免费观看网站| 精品一区91| 成人国产综合| 韩国久久久久久| 国产成人1区| 日本蜜桃在线观看视频| 欧美精品影院| 婷婷综合福利| 欧美日本久久| 国内在线观看一区二区三区| 欧美影院精品| 久久精品国产免费| 福利一区二区| 午夜国产精品视频免费体验区| 激情综合在线| 亚洲一区二区av| 97久久亚洲| 精品国产免费人成网站| 91精品一区二区三区综合在线爱| 久久久一二三| 亚洲一区网站| 国产情侣一区在线| 日韩免费一区| 亚洲一区欧美| 国产一区二区三区不卡视频网站 | 国产经典一区| 久久精品成人| 在线视频日韩| 国产精品密蕾丝视频下载| 日韩一区亚洲二区| 亚洲一区二区小说| 免费日韩一区二区三区| 91精品推荐| 国产精品亚洲产品| 激情综合网站| 国产精品日韩精品在线播放| 99久久婷婷| 欧美精品三级在线| 久久婷婷丁香| 久久影院资源站| 亚洲欧美视频一区二区三区| 国产精品xxxav免费视频| 国产一区二区精品久| 欧美日韩视频| 国产成人精品一区二区免费看京| 免费看日韩精品| 日本欧美不卡| 国产精品高清一区二区| 久久国产人妖系列| 久久免费黄色| 综合激情婷婷| 亚洲精品2区| 国产黄大片在线观看| 日韩av不卡一区二区| 亚洲二区在线| 国产资源在线观看入口av| 91大神在线观看线路一区| 成人看片网站| 国产69精品久久| 国产精品日韩精品在线播放| 亚洲精品影院在线观看| 午夜日韩福利| 影视先锋久久| 今天的高清视频免费播放成人| 欧美激情aⅴ一区二区三区| 亚洲精品系列| 亚洲人成网站在线在线观看| 国产综合婷婷| 欧美午夜不卡影院在线观看完整版免费| 欧美精品1区| 久久99久久久精品欧美| 日本午夜精品| 国产精品一区二区中文字幕| 午夜久久av| 国产乱码精品一区二区三区亚洲人| 亚洲欧洲午夜| 亚洲免费网址| 在线看片一区| 日韩国产欧美一区二区三区| 97精品久久| 精品精品久久| 亚洲午夜一级| 爽好多水快深点欧美视频| 快she精品国产999| 人人精品久久| 里番精品3d一二三区| 波多野结衣久久精品| 国产亚洲一区二区手机在线观看| 三级精品视频| 亚洲一区二区三区高清| 日韩av电影一区| 涩涩av在线| 亚洲另类av| 老司机免费视频一区二区三区| 欧美亚洲综合视频| 久久伊人国产| 韩国精品主播一区二区在线观看| 涩涩av在线| 成人台湾亚洲精品一区二区| 久久久蜜桃一区二区人| 最新亚洲国产| 国产黄大片在线观看| 婷婷成人在线| 日韩一区二区三区高清在线观看| 国产精品不卡| 视频在线观看国产精品| 免费看一区二区三区| 欧美综合二区| 中国字幕a在线看韩国电影| 亚洲我射av| 久久久精品久久久久久96| 日韩国产在线观看| 欧美另类综合| 亚洲电影有码| 精品资源在线| 亚洲精品成a人ⅴ香蕉片| 欧美一区久久久| 亚洲午夜久久| 国产99亚洲| 天堂网av成人| 中文一区一区三区高中清不卡免费| 日韩av黄色在线| 视频一区二区欧美| 在线成人动漫av| 天堂√8在线中文| 国产一区不卡| 精品国产精品久久一区免费式| 日韩激情精品| 日本大胆欧美人术艺术动态| 欧美日韩视频网站| 国产精品天堂蜜av在线播放| 中文在线日韩| 亚洲综合精品| 视频一区视频二区中文字幕| 久久蜜桃av| 亚洲精品a级片| 五月天久久久| 欧美粗暴jizz性欧美20| 999国产精品视频| 欧美高清一区| 欧美日韩国产探花| 免费观看日韩电影| 亚洲精品精选| 日本午夜精品视频在线观看|