web端區(qū)分不同的開(kāi)發(fā)環(huán)境

web端如何區(qū)分不同的開(kāi)環(huán)境

前言

  • 在項(xiàng)目開(kāi)發(fā)中我們經(jīng)常會(huì)遇到這個(gè)問(wèn)題,本地開(kāi)發(fā)環(huán)境,線下開(kāi)發(fā)環(huán)境,預(yù)上線開(kāi)發(fā)環(huán)境需要加以區(qū)分,有時(shí)候因?yàn)闉g覽器緩存清理不徹底的原因,很容易造成無(wú)法區(qū)分環(huán)境,往往測(cè)試了很長(zhǎng)時(shí)間發(fā)現(xiàn),不是自己想測(cè)得環(huán)境。

解決方案

  • 針對(duì)上述的問(wèn)題,根本解決方案,是我們?cè)陧?xiàng)目構(gòu)建時(shí)是基于不同的環(huán)境變量進(jìn)行的構(gòu)建,從表象上我們給到的解決方案形式有多種,主要分兩個(gè)方向
    • 基于ico區(qū)分
    • 基于頁(yè)面區(qū)分

配置不同的環(huán)境變量

基于webpack配置環(huán)境變量
//package.json相應(yīng)的指令集
"scripts": {
    "dev": "cross-env PORT=9099 node app.js   --mode development",
    "start": "cross-env NODE_ENV=production node app.js  --mode development",
    "build": "node build/build.js --mode production",
    "build:dev": "cross-env BUILD_MODE=dev node build/build.js --mode production",
    "build:pre": "cross-env BUILD_MODE=pre node build/build.js --mode production",
    "build:prod": "cross-env BUILD_MODE=prod node build/build.js --mode production",
    "lint": "eslint --ext .js,.vue src"
  },
  • 其中build:dev,build:pre,build:prod就是我們不同環(huán)境下打包構(gòu)建的不同指令,在環(huán)境變量中我們通過(guò)BUILD_MODE字段來(lái)區(qū)分,在相應(yīng)的webpack配置文件中獲取方法
       process.env.BUILD_MODE
    
    我們通過(guò)上述方法獲取到環(huán)境變量后,便可以進(jìn)行詳情的判斷,進(jìn)而走不同的配置
基于vue腳手架配置環(huán)境變量
//package.json下相應(yīng)的指令集
"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "build:dev": "vue-cli-service build --mode dev",
    "build:pre": "vue-cli-service build --mode pre",
    "build:pro": "vue-cli-service build --mode pro",
    "lint": "vue-cli-service lint",
    "start": "vue-cli-service serve && node serve"
  },
  • 與此同時(shí)我們需要在對(duì)應(yīng)項(xiàng)目的根目錄建立這樣幾個(gè)文件,.env,.env.dev,.env.pre,.env.prod
  • 相應(yīng)的文件內(nèi)容如下
    • .env
               VUE_APP_DEPLOY_ENV='local'
               NODE_ENV=development
      
      • .env.dev
               VUE_APP_DEPLOY_ENV='dev'
               NODE_ENV=development
      
      • .env.pre
               VUE_APP_DEPLOY_ENV='pre'
               NODE_ENV=preonline
      
      • .env.prod
               VUE_APP_DEPLOY_ENV='prod'
               NODE_ENV=production
      

在這里很明顯,大家能看到VUE_APP_DEPLOY_ENV便是我們要區(qū)分的不同變量,在相應(yīng)的配置文件中的獲取方式如下

    process.env.VUE_APP_DEPLOY_ENV
  • 以上兩個(gè)例子主要是說(shuō)明方式,從根本上上區(qū)分的方式就是通過(guò)package.json下的scripts,創(chuàng)建不同的指令,在不同的指令中配置不同的環(huán)境變量,進(jìn)而在相應(yīng)的配置文件中作區(qū)分,常見(jiàn)的react腳手架,nuxt腳手架的配置方式,大家可以自行查閱

基于ico區(qū)分

  • 這種方案在實(shí)際測(cè)試過(guò)程中,更加適用于PC端,因?yàn)镻C端在測(cè)試時(shí)比較容易觀察到頁(yè)面的ico,原理其實(shí)很簡(jiǎn)單,我們以webpack為例,我們知道,在webpack項(xiàng)目中有html-webpack-plugin這樣一個(gè)插件
      new htmlWebpackPlugin({
            favicon:'app/favicon.ico', 
            filename:"dist/index.html",
            template: 'app/index.html'
         }),
    
  • 很明顯在htmlWebpackPlugin中插件中根據(jù)不同的環(huán)境變量,我們可以配置不同路徑下的ico,進(jìn)而讓頁(yè)面最后的打包結(jié)果中ico不同,達(dá)到區(qū)分環(huán)境的目的,在這里需要注意,一定要將html中的ico引用注釋掉,建議根據(jù)不同的環(huán)境引入不同名稱的ico

基于頁(yè)面區(qū)分

  • 基于頁(yè)面區(qū)分只要值得是H5移動(dòng)端頁(yè)面,多數(shù)情況下H5端能夠直觀看到的并不是ico,甚至title也不容易看到,這時(shí)候我們希望直接在頁(yè)面上能有不同環(huán)境樣式的展示
  • 這里提供一個(gè)思路,可以在不同環(huán)境下,給body元素添加一個(gè)偽類元素,讓該偽類的樣式為一條帶顏色的線,停留在頁(yè)面頂部
實(shí)現(xiàn)方式
  • 在webpack中可以通過(guò)別名路徑的方式引入樣式,
      module.exports = {
        resolve: {
          alias: {
            '@': resolve('src'),
            '@dev':devPath
          }
        }
      }
    
  • 將devPath作為一個(gè)變量,根據(jù)不同的環(huán)境取到不同的路徑,在不同的路徑下編寫同一個(gè)樣式文件名稱,但是不同樣式的樣式文件,同意在公共js中引入該樣式,進(jìn)而輕松實(shí)現(xiàn)頁(yè)面環(huán)境的樣式區(qū)分
          import '@dev/devSign.scss'
    
  • 按照不同樣式文件的思路,還可以配置nuxt的link數(shù)據(jù)和css數(shù)據(jù),該方式大家可以自行查閱文檔

總結(jié)

環(huán)境變量在項(xiàng)目架構(gòu)中是一個(gè)可以靈活使用的手段,大家在配置不同環(huán)境下的項(xiàng)目時(shí)可以考慮加入一定量的變量進(jìn)行使用,但是在測(cè)試的過(guò)程中一定要小心翼翼,因?yàn)橐徊恍⌒臅?huì)造成整個(gè)項(xiàng)目構(gòu)建失敗,影響相應(yīng)環(huán)境的測(cè)試,一定要在本地各種環(huán)境下測(cè)試后,在推送代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄第1章 webpack簡(jiǎn)介 11.1 webpack是什么? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,827評(píng)論 0 1
  • 1、優(yōu)化loader配置1.1 縮小文件匹配范圍(include/exclude) 通過(guò)排除node_module...
    田成力閱讀 553評(píng)論 0 0
  • 寫在開(kāi)頭 先說(shuō)說(shuō)為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,441評(píng)論 4 31
  • “到了現(xiàn)在這個(gè)年紀(jì),確實(shí)誰(shuí)都不想再取悅了,跟誰(shuí)在一起舒服就和誰(shuí)在一起,包括朋友也是,累了我就躲遠(yuǎn)一點(diǎn),你喜歡我,我...
    153b116a2e96閱讀 151評(píng)論 0 1
  • 初始入年中,人生已經(jīng)走完了三分之一,回首往事,給自己留下來(lái)的記憶畫面坎坷,憂慮,隨著時(shí)間的風(fēng)化,雄心斗志書生氣早已...
    八零后的雨季閱讀 243評(píng)論 0 0

友情鏈接更多精彩內(nèi)容