最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在基于vue-cli的項(xiàng)目自定義打包環(huán)境

 更新時(shí)間:2018年11月10日 10:30:08   作者:ascpj  
本篇文章主要介紹了在基于vue-cli的項(xiàng)目自定義打包環(huán)境,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

在工作當(dāng)中,遇到了下面這個(gè)問題:

測(cè)試環(huán)境與生產(chǎn)環(huán)境中的用戶權(quán)限不一樣,因此,就需要根據(jù)測(cè)試環(huán)境打一個(gè)包,生產(chǎn)環(huán)境又打一個(gè)包。

可是,如果每次打包都需要更改權(quán)限的配置文件的話,會(huì)很麻煩,而且,體現(xiàn)不出一個(gè)coder該有的格調(diào)。

為了更有格調(diào)地解決這個(gè)問題,于是我百度了一番,上天不負(fù)有心人,讓我找到了解決方案。

在詳敘解決方案之前,先簡(jiǎn)單介紹下解決方案當(dāng)中使用到的工具:cross-env,webpack.DefinePlugin

cross-env是給process.env當(dāng)中添加變量的,那process.env又是什么呢?

process是一個(gè)控制node.js的進(jìn)程,它是一個(gè)global對(duì)象,包含進(jìn)程相關(guān)的一些信息,而process.env則是包含用戶環(huán)境信息的一個(gè)對(duì)象,例如下面這樣的對(duì)象:

{
 TERM: 'xterm-256color',
 SHELL: '/usr/local/bin/bash',
 USER: 'maciej',
 PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
 PWD: '/Users/maciej',
 EDITOR: 'vim',
 SHLVL: '1',
 HOME: '/Users/maciej',
 LOGNAME: 'maciej',
 _: '/usr/local/bin/node'
}

使用cross-env可以往這個(gè)process.env對(duì)象當(dāng)中添加自定義的數(shù)據(jù),然后可以在任何node.js的執(zhí)行環(huán)境當(dāng)中獲取,一般是在打包配置當(dāng)中獲取process.env.NODE_ENV來判斷是哪種環(huán)境,然后再作相應(yīng)的配置。

官方解釋

如何使用cross-env

  1. 安裝:npm i cross-env -D
  2. 在npm自定義命令當(dāng)中使用;
"script":{
  "build:testing":"cross-env NODE_ENV=‘testing' webpack"
}

然后,我們執(zhí)行npm run build:testing的時(shí)候,就好執(zhí)行以上的命令,cross-env就會(huì)在process.env當(dāng)中添加一個(gè)NODE_ENV的屬性,屬性的值就是‘testing’字符串,注意這里是加了單引號(hào)的,因?yàn)檫@樣才是一個(gè)字符串,如果不加的話,就相當(dāng)于一個(gè)代碼片段,還要在獲取完之后通過JSON.stringify去轉(zhuǎn)成字符串。

webpack.DefinePlugin又是什么呢?

webpack.DefinePlugin是webpack自帶的一個(gè)插件,它的作用是在編譯的時(shí)候生成一些全局變量的,這里說的全局變量指的是客戶端的全局變量,相當(dāng)于掛載在window對(duì)象上的變量,我們可以利用它的這個(gè)功能在不同的環(huán)境(開發(fā),測(cè)試,或者生產(chǎn))當(dāng)中定義不同的行為。

官方介紹與使用

介紹完兩個(gè)插件了,是時(shí)候說一下兩者結(jié)合在實(shí)際當(dāng)中如何使用了。

下面將展示如何解決本文開頭一開始所提到的根據(jù)測(cè)試和生產(chǎn)環(huán)境配置不同的用戶權(quán)限的問題。

在config目錄下,根據(jù)不同的環(huán)境創(chuàng)建不同的配置文件

如上圖所示,test.env.js是測(cè)試環(huán)境的配置文件,prod.env.js則是生產(chǎn)環(huán)境的配置文件

test.env.js的配置

const merge = require('webpack-merge')
const devEnv = require('./dev.env')

module.exports = merge(devEnv, {
 NODE_ENV: '"testing"'
})

prod.env.js的配置

module.exports = {
  NODE_ENV:"production"
}

分別創(chuàng)建測(cè)試與生產(chǎn)的權(quán)限配置文件

test.authority.js 測(cè)試環(huán)境權(quán)限

function getAuthority(userAuthority){
  const menus = [];
  switch(userAuthority){
    case 'zhangsan':
      menus = ["a","b","c","d"];  //這里的a,b,c,d相當(dāng)與路由配置當(dāng)中頁面的name
      break;
      case 'lishi':
        menus = ["a","b","c"];  
        break;
      case 'wangwu':
        menus = ["b","c","d"];  
        break;
      default:
        menus = ["a","b"];
      
  }
  return menus;
}
export default getAuthority;

prod.authority.js 生產(chǎn)環(huán)境的配置方法頁和上面一樣,只不過是menus里的配置不同

使用cross-env配置對(duì)應(yīng)的NODE_ENV

package.json

"scripts":{
  "build:testing": "cross-env NODE_ENV='testing' node build/build.js",
  "build": "cross-env NODE_ENV='production' node build/build.js"
}

npm run build:testing執(zhí)行的是測(cè)試環(huán)境的打包,npm run build則是生產(chǎn)環(huán)境的打包。

將當(dāng)前環(huán)境的配置添加到客戶端全局

build/webpack.prod.conf.js

const env = process.env.NODE_ENV === 'testing' ? require("../config/test.env.js") : require("../config/prod.env.js");

//配置webpack.DefinePlugin將env添加到全局變量當(dāng)中
plugins:[
new webpack.DefinePlugin({
  "ENV":env
})
]

根據(jù)環(huán)境信息配置用戶權(quán)限

要對(duì)用戶權(quán)限進(jìn)行控制是要先知道當(dāng)前登錄的是哪個(gè)用戶,因此用戶權(quán)限配置的操作是在登錄頁面完成的。

login.vue

//獲取環(huán)境信息,然后根據(jù)環(huán)境信息讀取對(duì)應(yīng)的權(quán)限配置文件
const env = ENV.NODE_ENV === "testing" ? "test" : "prod";

import getAuthority from `${env}.authority.js`;

export default {
  methods:{
    login(){
      axios({...}).then(res => {  //調(diào)用登錄接口獲取當(dāng)前用戶信息
        let userAuthority = getAuthority(res.userName);  //獲取當(dāng)前登錄用戶的頁面權(quán)限
        sessionStorage.setItem("authorityPages",JSON.stringify(userAuthority))  //將用戶的頁面權(quán)限保存起來,在生成側(cè)邊欄的時(shí)候通過v-if指令判斷是否渲染
      })
    }
  }
}

來到這里,就能夠解決本文一開始所提的問題了,下面總結(jié)一下。

總結(jié)

  1. 根據(jù)不同的環(huán)境編寫對(duì)應(yīng)的打包環(huán)境信息配置文件;
  2. 根據(jù)不同環(huán)境編寫對(duì)應(yīng)用戶權(quán)限配置文件;
  3. 根據(jù)不同環(huán)境編寫對(duì)應(yīng)的npm打包命令,使用cross-env設(shè)置對(duì)應(yīng)的運(yùn)行時(shí)環(huán)境;
  4. 在打包配置文件當(dāng)中根據(jù)運(yùn)行時(shí)環(huán)境獲取對(duì)應(yīng)的環(huán)境配置信息,然后使用webpack.DefinePulgin添加到客戶端全局變量當(dāng)中;
  5. 登錄頁根據(jù)全局變量中的環(huán)境信息獲取對(duì)應(yīng)的用戶權(quán)限配置文件;
  6. 用戶登錄之后根據(jù)獲取的用戶權(quán)限文件中的方法獲取登錄用戶的權(quán)限,并把當(dāng)前登錄用戶的權(quán)限保存起來以便之后使用。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue表單實(shí)例代碼

    Vue表單實(shí)例代碼

    Vue.js 是用于構(gòu)建交互式的 Web 界面的庫。這篇文章主要介紹了Vue表單實(shí)例代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • Vue實(shí)現(xiàn)文件上傳和下載功能

    Vue實(shí)現(xiàn)文件上傳和下載功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)文件上傳和下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue?vue-touch移動(dòng)端手勢(shì)詳解

    vue?vue-touch移動(dòng)端手勢(shì)詳解

    這篇文章主要介紹了vue?vue-touch移動(dòng)端手勢(shì)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue項(xiàng)目登錄頁面實(shí)現(xiàn)記住用戶名和密碼的示例代碼

    vue項(xiàng)目登錄頁面實(shí)現(xiàn)記住用戶名和密碼的示例代碼

    本文主要介紹了vue項(xiàng)目登錄頁面實(shí)現(xiàn)記住用戶名和密碼的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 原生JS?Intersection?Observer?API實(shí)現(xiàn)懶加載

    原生JS?Intersection?Observer?API實(shí)現(xiàn)懶加載

    這篇文章主要為大家介紹了原生JS?Intersection?Observer?API實(shí)現(xiàn)懶加載示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Vue3實(shí)現(xiàn)點(diǎn)擊按鈕實(shí)現(xiàn)文字變色功能

    Vue3實(shí)現(xiàn)點(diǎn)擊按鈕實(shí)現(xiàn)文字變色功能

    這篇文章主要介紹了使用Vue3實(shí)現(xiàn)點(diǎn)擊按鈕實(shí)現(xiàn)文字變色功能,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • element-UI el-table修改input值視圖不更新問題

    element-UI el-table修改input值視圖不更新問題

    這篇文章主要介紹了element-UI el-table修改input值視圖不更新問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • vue項(xiàng)目如何分環(huán)境部署

    vue項(xiàng)目如何分環(huán)境部署

    這篇文章主要介紹了vue項(xiàng)目如何分環(huán)境部署問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2018-12-12
  • Vue3中的unref詳解與常見使用方法

    Vue3中的unref詳解與常見使用方法

    這篇文章主要給大家介紹了關(guān)于Vue3中unref詳解與常見使用的相關(guān)資料,Vue3中的unref是一個(gè)實(shí)用工具,用于簡(jiǎn)化訪問響應(yīng)式引用和普通值的過程,通過自動(dòng)判斷類型,unref可以處理任何類型的值,從而使代碼更加簡(jiǎn)潔和易讀,需要的朋友可以參考下
    2024-11-11
  • element ui表格實(shí)現(xiàn)下拉篩選功能

    element ui表格實(shí)現(xiàn)下拉篩選功能

    這篇文章主要為大家詳細(xì)介紹了element ui表格實(shí)現(xiàn)下拉篩選功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論

茶陵县| 驻马店市| 大连市| 霍林郭勒市| 柏乡县| 涪陵区| 临武县| 建宁县| 洛川县| 壤塘县| 黄龙县| 封开县| 霸州市| 巴里| 酒泉市| 科技| 巢湖市| 广昌县| 恩施市| 德令哈市| 贺州市| 临江市| 邢台县| 原阳县| 海丰县| 婺源县| 石棉县| 通城县| 兰坪| 东辽县| 民权县| 阳泉市| 仪征市| 仁化县| 南涧| 淮阳县| 兴化市| 阿拉善右旗| 西峡县| 独山县| 马公市|