内容简介:實務上一定會遇到在不同 server (Vue 2.5.17Vue CLI 3.0.3
實務上一定會遇到在不同 server ( development 、 lab 、 staging 與 production ) ,且各有各的 環境變數 ,該如何設定這些環境變數並且自動切換呢 ?
Version
Vue 2.5.17
Vue CLI 3.0.3
Modes
Vue CLI 內建 3 種 mode:
- development :執行
yarn serve與yarn lint時使用此模式 - production :
yarn build與yarn test:e2e使用此模式 - test :
yarn test:unit使用此模式
我們也可以自行新增 mode,如 lab 與 staging 。
.env
- .env :所有 mode 都會載入
- env.local :所有 mode 都會載入,但不會進 Git,適合每個人本機自行設定
- env.[mode] :特定 mode 會載入
- env.[mode].local :特定 mode 會載入,但不會進 Git,適合每個人本機自行設定
若 key 同時存在 .env 、 .env.[mode] 與 env.[mode].local 時,則優先權:
env.[mode].local > env.[mode] > env.local
.env.development.local
NODE_ENV=development VUE_APP_API="https://jsonplaceholder.typicode.com"
- NODE_ENV :指定使用 Vue CLI 內建的 3 個 mode 之一
- VUE_APP_API :所有變數以
VUE_APP_為開頭
console.log(process.env.VUE_APP_API);
任何在 .env 所設定的變數,可以使用 process.env.VUE_APP_xxx 讀取。
實務案例
- 前後端分離後,當 API spec 定義好,前後端就可以同時進行開發,此時後端的 API 還沒開發好,前端可根據 API spec 的 example 製造
假 API先行開發 - 執行 e2e testing 時,由於實際打
真 API的測試速度較慢,因此會希望只打 local 的假 API,加快測試速度 - 希望假 API 能留下來進 Git,能透過 CLI 切換使用
真 API或假 API,不用修改 code
.env
使用 Node.js 建立假 API
安裝 Express 與 Cors
$ yarn add express
安裝 express framework。
$ yarn add cors
安裝 express 的解 CORS 套件。
- 在
package.json的dependencies會看到cors與express兩個 package 被安裝
建立 node 目錄與檔案
- 在專案根目錄建立
node目錄與index.js
node/index.js
const express = require('express');
const cors = require('cors');
const todos = require('./todos');
const app = express().use(cors());
const hostname = '127.0.0.1';
const port = 3000;
app.get('/todos', todos);
app.listen(port, () => {
console.log(`Serving running at http://${hostname}:${port}/`);
});
第 1 行
const express = require('express');
Import express module。
第 2 行
const cors = require('cors');
Import cors module。
第 3 行
const todos = require('./todos');
Import 自己寫的 todos module,為假 API。
第 6 行
const app = express().use(cors());
使用 express() 建立 app ,並且 use cors() 所建立的物件。
第 7 行
const hostname = '127.0.0.1'; const port = 3000;
定義 hostname 位置與 port。
第 10 行
app.get('/todos', todos);
將 /todos 設定為 GET,其資料由 todos() function 所提供。
12 行
app.listen(port, () => {
console.log(`Serving running at http://${hostname}:${port}/`);
});
使用 app.listen() 啟動 Node.js 服務。
node/todos.js
const todos = (req, res) =>
res.send([
{
userId: 1,
id: 1,
title: 'delectus aut autem',
completed: false,
},
{
userId: 1,
id: 2,
title: 'quis ut nam facilis et officia qui',
completed: false,
},
{
userId: 1,
id: 3,
title: 'fugiat veniam minus',
completed: false,
},
{
userId: 1,
id: 4,
title: 'et porro tempora',
completed: true,
},
{
userId: 1,
id: 5,
title: 'laboriosam mollitia et enim quasi adipisci quia provident illum',
completed: false,
},
{
userId: 1,
id: 6,
title: 'qui ullam ratione quibusdam voluptatem quia omnis',
completed: false,
},
]);
module.exports = todos;
第 1 行
const todos = (req, res) =>
定義 todos() ,其 argument 為 req 與 res 。
第 2 行
res.send();
API 要傳回的 JSON 資料。
41 行
module.exports = todos;
使用 CommonJS 方式 export 出 todos() 。
使用 .env 切換 API
建立 .env
.env
NODE_ENV=production
-
整個專案的
.env,會進 Git -
NODE_ENV預設為 Vue CLI 的productionmode
.env.development
NODE_ENV=development VUE_APP_API="https://jsonplaceholder.typicode.com"
-
設定
developmentmode 的.env,會進 Git -
NODE_ENV設定為 Vue CLI 的developmentmode -
VUE_APP_API變數為真 API位址
.env.development.local
NODE_ENV=development VUE_APP_API="http://localhost:3000"
-
設定
developmentmode 的env,不會進 Git -
NODE_ENV設定為 Vue CLI 的developmentmode -
VUE_APP_API變數為假 API位址
因為 .env.development.local 不會進 Git,自己開發用的環境變數可以設定在此
.env.lab
NODE_ENV=development VUE_APP_API="https://jsonplaceholder.typicode.com"
- 設定
labmode,此為自訂的新 mode,會進 Git -
NODE_ENV設定為 Vue CLI 的productionmode -
VUE_APP_API變數為真 API位址
讀取 .env
api/todo.api.js
import axios from 'axios';
const API = process.env.VUE_APP_API;
export const fetchTodos = () => axios.get(`${API}/todos`);
第 3 行
const API = process.env.VUE_APP_API;
使用 process.env.VUE_APP_API 讀取 .env 的 VUE_APP_API 變數。
使用假 API
package.json
{
"name": "vue-todo-lis-api",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"api": "node ./node/index.js"
},
"dependencies": {
"axios": "^0.18.0",
"cors": "^2.8.4",
"express": "^4.16.4",
"vue": "^2.5.17"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.0.3",
"@vue/cli-plugin-eslint": "^3.0.3",
"@vue/cli-service": "^3.0.3",
"@vue/eslint-config-airbnb": "^3.0.5",
"vue-template-compiler": "^2.5.17"
}
}
第 9 行
"api": "node ./node/index.js"
輸入 yarn api 將執行 Node.js 的 假 API 。
$ yarn api
- 執行
假 API
$ yarn serve
-
yarn serve會使用developmentmode,因為有提供.env.development.local,所以VUE_APP_API應為http://localhost:3000,也就是假 API
使用真 API
$ yarn serve --mode lab
-
yarn serve使用labmode,也就是真 API
.env.local.sample
.env.development.local.sample
NODE_ENV=development VUE_APP_API="http://localhost:3000"
由於 env.local.sample 沒有進 Git,其他人直接 git clone 下整個專案時,會因為不會設定 .env.development.local ,導致無法執行 假 API 模式,可另外提供 .env.development.local.sample ,此檔會進 Git,在自行由 .env.development.local.sample 命名為 .env.development.local 即可。
Conclusion
- 透過 Node.js,就可解決 JSON Server 無法建立 POST 回傳資料的問題,因為 JSON Server 是純 RESTful
- 靈活的運用
.env.development.local與yarn serve --mode,就可靈活的切換假 API與真 API - 可將
.env.development.local.sample也存進 Git,如此其他人git clone下來,可根據此檔建立.env.development.local
Reference
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Probability and Computing
Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00
Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
XML、JSON 在线转换
在线XML、JSON转换工具