Vue 前端uni-app多環(huán)境配置部署服務(wù)器的問題

轉(zhuǎn)載請標(biāo)明出處:
http://dujinyang.blog.csdn.net/
本文出自:【奧特曼超人的博客】

@[TOC](Vue uni如何部署到服務(wù)器斩萌,并區(qū)分部署環(huán)境)

前端Vue

Vue 經(jīng)過這一年的進(jìn)化缝裤,模版也是相當(dāng)豐富了,但在使用多界面時颊郎,個人感覺還是有點(diǎn)弊端憋飞,CSS的樣式問題。

Vue.js(讀音 /vju?/, 類似于 view) 是一套構(gòu)建用戶界面的漸進(jìn)式框架姆吭。

針對問題

多環(huán)境部署會引發(fā)很多問題榛做,當(dāng)然,是開發(fā)環(huán)境下了内狸,這次博主我也引發(fā)了這個小問題检眯,從而看到很多人對部署的環(huán)境會有疑問,畢竟Vue沒有暴漏出像JAVA那樣的可配置環(huán)境昆淡。

SyntaxError: Unexpected token p in JSON
  • 需要區(qū)分 開發(fā)锰瘸、QA、預(yù)發(fā)布昂灵、生產(chǎn)等多個環(huán)境获茬,如何滿足?
  • 怎么部署到服務(wù)器上自動判斷呢倔既?

對Uni-app 的使用也是這段時間好奇才去看了看恕曲,當(dāng)然,并不是去看使用渤涌,而是好奇整個架構(gòu)模版的生成佩谣,還是使用HBUILDER去開發(fā),所以我們得注意兩件事情:

  1. Vue 只關(guān)注視圖層 实蓬, 采用自底向上增量開發(fā)的設(shè)計茸俭。
  2. Vue API 實(shí)現(xiàn)了數(shù)據(jù)綁定和視圖組件,所以安皱,很多人用 npm install 后都會出現(xiàn)package的系列問題调鬓。

package.json描述

不管你安裝說明組件或模版,總是會看到目錄下 package.json 酌伊,那這個文件是做什么用的呢腾窝?其實(shí)這個文件相當(dāng)于 config ,所以你得注意 distlib 居砖。

多環(huán)境部署

很多人想要像AS或Gradle一樣去描述配置環(huán)境虹脯,類似下面這種偽判斷:

區(qū)分 開發(fā)、QA奏候、預(yù)發(fā)布循集、生產(chǎn)等多個環(huán)境
if (process.env.ENV === 'development') {

}

if (process.env.ENV === 'QA') {

}

if (process.env.ENV === 'pre-release') {

}

if (process.env.ENV === 'production') {

}

會報錯?來看看源碼到底是為何……

查看源碼獲取解決方案

來看下源碼蔗草,path路徑讀取的Key是path 咒彤,所以:

const path = require('path')

其它可以忽略疆柔,重要的是下面這段:

module.exports = function (content) {
  if (process.env.UNI_USING_COMPONENTS || process.env.UNI_PLATFORM === 'h5') {
    return require('./index-new').call(this, content)
  }

  this.cacheable && this.cacheable()

  const manifestJsonPath = path.resolve(process.env.UNI_INPUT_DIR, 'manifest.json')
  const manifestJson = parseManifestJson(fs.readFileSync(manifestJsonPath, 'utf8'))

  this.addDependency(manifestJsonPath)

  const pagesJson = parsePagesJson(content)

  if (manifestJson.transformPx === false) {
    process.UNI_TRANSFORM_PX = false
  } else {
    process.UNI_TRANSFORM_PX = true
  }
  if (process.env.UNI_PLATFORM === 'h5') {
    return require('./platforms/h5')(pagesJson, manifestJson)
  }

  const changedEmitFiles = []

  function checkPageEmitFile (pagePath, pageStyle) {
    checkEmitFile(pagePath, parseStyle(pageStyle), changedEmitFiles)
  }

  parsePages(pagesJson, function (page) {
    checkPageEmitFile(page.path, page.style)
  }, function (root, page) {
    checkPageEmitFile(normalizePath(path.join(root, page.path)), page.style)
  })

  const jsonFiles = require('./platforms/' + process.env.UNI_PLATFORM)(pagesJson, manifestJson)

  if (jsonFiles && jsonFiles.length) {
    jsonFiles.forEach(jsonFile => {
      jsonFile && checkEmitFile(jsonFile.name, jsonFile.content, changedEmitFiles)
    })
  }

  changedEmitFiles.forEach(name => {
    this.emitFile(name + '.json', emitFileCaches[name])
  })

  return ''
}

有點(diǎn)多,抽取一下:

  if (manifestJson.transformPx === false) {
    process.UNI_TRANSFORM_PX = false
  } else {
    process.UNI_TRANSFORM_PX = true
  }
  if (process.env.UNI_PLATFORM === 'h5') {
    return require('./platforms/h5')(pagesJson, manifestJson)
  }

其它代碼太多镶柱,暫時不貼了婆硬,大致意義就是解析package.json后,再去讀取H5的manifest配置奸例,所以最后發(fā)現(xiàn)彬犯,是manifest配置有問題,查找是多了 pubilcPath 查吊,去掉后谐区,SyntaxError: Unexpected token p 錯誤也就消失了。

因為當(dāng)代路徑就在目錄下了逻卖,所以打包的時候會引入了config宋列,那自己只需要再分開一份配置文件即可。

這樣就解決了评也,當(dāng)然也可以安裝個cross-env 炼杖,安裝代碼:

npm install --save-dev cross-env

這樣的話,我們可以定義:

"build": "cross-env BUILD_ENV=production node build/build.js",
"QA": "cross-env BUILD_ENV=QA node build/build.js",
"TEST": "cross-env BUILD_ENV=TEST node build/build.js"

這樣就不需要另外分開一份配置了盗迟,當(dāng)然坤邪,可以把當(dāng)前的BUILD_ENV設(shè)置到環(huán)境變量中,如果不是常用不建議設(shè)置罚缕。

語法:

cross-env xxx=xxx node build/build.js

那么最終的代碼:

 let ENV = process.env.BUILD_ENV;

  if (ENV == 'production') {
    // 生產(chǎn)環(huán)境 
  } else if (ENV == 'QA') {
    // 測試環(huán)境 
  }else if(ENV== 'TEST'){
    // 開發(fā)測試
  }

也可以自己去定義個全局變量使用艇纺,或者修改index下的源碼,那樣比較麻煩邮弹,小編我是修改了黔衡,不過 所有的項目都能用特定的字段去使用了。



作者:奧特曼超人Dujinyang

來源:CSDN

原文:https://dujinyang.blog.csdn.net/

版權(quán)聲明:本文為博主杜錦陽原創(chuàng)文章腌乡,轉(zhuǎn)載請附上博文鏈接盟劫!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市与纽,隨后出現(xiàn)的幾起案子侣签,更是在濱河造成了極大的恐慌,老刑警劉巖渣锦,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硝岗,死亡現(xiàn)場離奇詭異,居然都是意外死亡袋毙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門冗尤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來听盖,“玉大人胀溺,你說我怎么就攤上這事〗钥矗” “怎么了仓坞?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長腰吟。 經(jīng)常有香客問我无埃,道長,這世上最難降的妖魔是什么毛雇? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任嫉称,我火速辦了婚禮,結(jié)果婚禮上灵疮,老公的妹妹穿的比我還像新娘织阅。我一直安慰自己,他們只是感情好震捣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布荔棉。 她就那樣靜靜地躺著,像睡著了一般蒿赢。 火紅的嫁衣襯著肌膚如雪润樱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天羡棵,我揣著相機(jī)與錄音祥国,去河邊找鬼。 笑死晾腔,一個胖子當(dāng)著我的面吹牛舌稀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灼擂,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼壁查,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剔应?” 一聲冷哼從身側(cè)響起睡腿,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峻贮,沒想到半個月后席怪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纤控,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年挂捻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片船万。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡刻撒,死狀恐怖骨田,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情声怔,我是刑警寧澤态贤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站醋火,受9級特大地震影響悠汽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芥驳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一柿冲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晚树,春花似錦姻采、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宝鼓,卻和暖如春刑棵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愚铡。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工蛉签, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沥寥。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓碍舍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親邑雅。 傳聞我的和親對象是個殘疾皇子片橡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容