Nuxt不同環(huán)境如何區(qū)分的方法
背景
在一般情況下,我們的項目肯定需要區(qū)分不同環(huán)境,來決策其對應的策略,包括但不局限于接口轉發(fā)地址、打包策略、日志輸出策略等。那么拋開具體要設置哪些內(nèi)容,我們需要先要有區(qū)分環(huán)境的能力才能做這些事情。那么Nuxt提供給我們這樣的基本能力了么?答案是肯定的。
下面我們以不同環(huán)境肯定會不一樣的接口轉發(fā)地址為例,進行相關的說明。
nuxt.config.js
用Nuxt框架開發(fā)的同學相信對這個配置文件都不陌生,那么本文也會涉及到這里面的一個具體配置就是axios的配置。配置的地址取決于一個變量,這個變量是不確定的。配置代碼如下:
備注:關于axios以及proxy如何配置參考我另外的文章哦。
export default { modules: ["@nuxtjs/axios"], axios: { // 是否允許跨域 proxy: true, // 最多重發(fā)三次 retry: { retries: 3, }, // 非線上環(huán)境開啟debug debug: !isProd, // 是否是可信任 withCredentials: true, timeout: 2000, }, proxy: { "/api": { changeOrigin: true, target: targetUrl, pathRewrite: { "^/api": "/api", }, } } }
關鍵參數(shù)
isProd , targetUrl
其中不同環(huán)境的地址我們可以做靜態(tài)維護,根據(jù)環(huán)境標識來取用對應的環(huán)境地址,而是否是生產(chǎn)環(huán)境,也可以通過環(huán)境標識來控制。
假設我們的不同環(huán)境的配置字典是這樣的(建議單獨寫一個配置文件的config.js)。
備注:其中預發(fā)環(huán)境建議與生產(chǎn)環(huán)境除了域名配置不一樣,其他盡量保持一致,可以前置盡可能的奇怪問題。
export default { dev: "http://dev.xxx.net/", stable: "https://stable.xxx.net/", pre: "https://pre.xxx.com/", prod: "http://xxx.com/", }
那么使用定義變量便是如下:
const isProd = process.env.NODE_ENV === "prod"; const targetUrl = serverConfig[ process.env.NODE_ENV || 'stable'];
那么process.env.NODE_ENV 是如何定義出來的呢?我們根據(jù)項目開發(fā)的不同階段區(qū)分處理。
開發(fā)階段設置變量
在npm中有這樣一個開源庫,可以實現(xiàn)跨平臺的設置node變量,它便是cross-env,npm模塊地址:https://www.npmjs.com/package/cross-env,怎么安裝就不贅述了。
因為本地開發(fā)一般執(zhí)行的是npm run dev,而默認的包文件的執(zhí)行命令中是沒有區(qū)分環(huán)境的配置的,所以簡單處理,我們可以直接在包文件的可執(zhí)行腳本中增加對應的可執(zhí)行腳本,目的就是我不想因為切換環(huán)境不斷的修改我的配置文件或者通過注釋選擇修改哪個文件,另外這一點也是更符合開發(fā)習慣的,在一般情況下,我們也不會各個環(huán)境來回切換調(diào)試一個功能。
package.json 中追加的可執(zhí)行命令:其中我們定義的NODE_ENV的值就是我們在配置文件的鍵值,請保持它們的一致性。
"scripts": { "dev": "cross-env NODE_ENV=dev nuxt", "dev-stable": "cross-env NODE_ENV=stable nuxt", "dev-pre": "cross-env NODE_ENV=pre nuxt", "dev-prod": "cross-env NODE_ENV=prod nuxt" }
部署階段
部署階段,作為常識,我們知道,最終一定是服務器進程守護的部署,不會是npm run start 這種方式部署。所以對應的引入pm2是基本選型,而pm2的生態(tài)下是支持使用配置文件部署的。你可以在根目錄下創(chuàng)建ecosystem.config.js,然后配置基本的內(nèi)容如下:其中以env_xx 的部分就是在pm2中支持配置環(huán)境變量的部分,相比cross-env,設置變量的方式更加簡潔,是個js基本對象格式的。保持也是設置NODE_ENV以及對應的env標識即可。
module.exports = { apps: [ { name: 'demo_pc', exec_mode: 'cluster', instances: '2', // Or a number of instances script: './node_modules/nuxt/bin/nuxt.js', args: 'start', log_date_format:'hxpc_YYYY-MM-DD HH:mm Z', log_file:'pc.log', out_file: 'out.log', env: { "NODE_ENV": "prod", }, env_dev: { "NODE_ENV": "dev", }, env_prod : { "NODE_ENV": "prod" }, env_pre : { "NODE_ENV": "pre" }, env_stable : { "NODE_ENV": "stable" } }, ] }
然后在啟動時,可以使用pm2 start --env stable 來指定使用哪個環(huán)境。我為了方便運維,在習慣上,將默認的不設置env 設置為啟動生產(chǎn)環(huán)境配置。pm2 start,這種情況下會使用env 這個的對應配置。
小結
本文介紹就到這里了,希望大家可以清楚的知道如何根據(jù)環(huán)境標識自定義設置和使用一些環(huán)境差異變量,并且發(fā)掘和利用好這一點。
到此這篇關于Nuxt不同環(huán)境如何區(qū)分的方法的文章就介紹到這了,更多相關Nuxt不同環(huán)境區(qū)分內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決vue-cli-service不是內(nèi)部或外部命令也不是可運行的程序或批處理文件的報錯問題
這篇文章主要介紹了解決vue-cli-service不是內(nèi)部或外部命令也不是可運行的程序或批處理文件的報錯問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03vue-cli之引入Bootstrap問題(遇到的坑,以及解決辦法)
這篇文章主要介紹了vue-cli之引入Bootstrap問題(遇到的坑,以及解決辦法),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10使用Vue和Firebase實現(xiàn)后臺數(shù)據(jù)存儲的示例代碼
在現(xiàn)代 web 應用開發(fā)中,前端和后端的無縫協(xié)作至關重要,借助 Firebase 等云計算解決方案,前端開發(fā)者可以輕松實現(xiàn)數(shù)據(jù)存儲與實時更新,本文將為大家詳細介紹如何利用 Vue 3 的 Composition API 和 Firebase 實現(xiàn)后臺數(shù)據(jù)存儲,需要的朋友可以參考下2024-10-10Vue.set()實現(xiàn)數(shù)據(jù)動態(tài)響應的方法
這篇文章主要介紹了Vue.set()實現(xiàn)數(shù)據(jù)動態(tài)響應的相關知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-02-02