vue-cli 3.x && 4.x 踩坑(持續(xù)更新)

資料

vue-cli 中文官網(wǎng)

正文(3.x)

1. 初次創(chuàng)建項(xiàng)目,控制臺(tái)報(bào)錯(cuò)(一直循環(huán),真的惡心)

解決之后不知為何,錯(cuò)誤無(wú)法再次還原了

  1. 報(bào)錯(cuò)文字
Invalid Host/Origin header
[WDS] Disconnected!
  1. 解決參考地址

Vue thinks local IP address is global, causing several issues · Issue #1616 · vuejs/vue-cli

  1. 具體解決方法
  • vue.config.js 配置文件中,添加 devServer.disableHostCheck 配置即可
module.exports = {
  /**
   * 接口代理配置
   * 如果你的前端應(yīng)用和后端 API 服務(wù)器沒有運(yùn)行在同一個(gè)主機(jī)上,你需要在開發(fā)環(huán)境下將 API 請(qǐng)求代理到 API 服務(wù)器。
   * https://cli.vuejs.org/zh/config/#devserver-proxy
   * https://github.com/chimurai/http-proxy-middleware#proxycontext-config
   */
  devServer: {
    disableHostCheck: true
  },
}

2. 根據(jù)官網(wǎng)配置的 devServer.proxy 訪問(wèn)失敗,提示 404

官網(wǎng)地址

  1. 依照官網(wǎng)的設(shè)置出現(xiàn)問(wèn)題
devServer: {
    disableHostCheck: true,
    proxy: {
      '/dictpc': {
        target: 'http://183.129.5.16:8080/dictpc',
        ws: true, // proxy websockets
        changeOrigin: true // needed for virtual hosted sites
      }
    }
  },

依照如上設(shè)置,啟動(dòng)項(xiàng)目,直接 404

  1. 解決問(wèn)題
  • proxy 增加 pathRewrite 設(shè)置即可,之后重啟項(xiàng)目(注意每次修改配置后必須得重新啟動(dòng)項(xiàng)目)
devServer: {
    disableHostCheck: true,
    proxy: {
      '/dictpc': {
        target: 'http://183.129.5.16:8080/dictpc',
        ws: true, // proxy websockets
        changeOrigin: true, // needed for virtual hosted sites
        pathRewrite: {
          '^/dictpc': ''
        }
      }
    }
  },

3. sourcemap 默認(rèn)是開啟的,導(dǎo)致打包出來(lái)的 dist -> js 文件夾過(guò)大

  1. 發(fā)現(xiàn)問(wèn)題是在看今天(2019.1.15)新出的一款匿名社交產(chǎn)品 馬桶MT 官網(wǎng)的源碼時(shí),下面是查看的截圖
馬桶源碼查看截圖
  • 后來(lái)發(fā)現(xiàn)我之前用的時(shí)候也沒注意過(guò)這個(gè)問(wèn)題耶,/尷尬
  1. 解決問(wèn)題
  • 官網(wǎng)提供了專門的配置解決這個(gè)問(wèn)題

配置參考 | Vue CLI 3

  • 具體實(shí)施:在 vue.config.jsmodule.exports 中加入下面的配置
productionSourceMap: false

4. .vue 文件中使用了沒寫內(nèi)容的 scriptstyle 空標(biāo)簽導(dǎo)致的 bug

  1. script 沒寫內(nèi)容
  • 源碼示例
<script>
</script>
  • bug文字描述
Cannot set property 'render' of undefined
  • 解決方法
  • 在里面寫上內(nèi)容 export default {}
  • 刪掉 script 標(biāo)簽
  1. script 沒寫內(nèi)容
  • 源碼示例
<style lang="stylus">
@import './style/common'
</style>
  • 這樣導(dǎo)致的問(wèn)題

打包出現(xiàn)空的 `css` 文件

后端 java 一起上傳至服務(wù)器時(shí),空文件并沒有被上傳上去,頁(yè)面訪問(wèn)時(shí)該 css 資源 404,且使用該資源的路由對(duì)應(yīng)的頁(yè)面腳本會(huì)因?yàn)槲募也坏蕉鴪?bào)錯(cuò),該路由頁(yè)面會(huì)直接打不開

  • 解決方法
  • 直接刪掉 style 標(biāo)簽即可

5. 依照官網(wǎng)結(jié)構(gòu)寫的 store 目錄結(jié)構(gòu),導(dǎo)致頁(yè)面出錯(cuò)

官網(wǎng)鏈接的購(gòu)物車示例代碼

  • 錯(cuò)誤文本
[vuex] unknown mutation type: updateVipCard
  • 錯(cuò)誤原因

官方文檔 - 命名空間
購(gòu)物車示例中,由于需要 "具有更高的封裝度和復(fù)用性,你可以通過(guò)添加 namespaced: true 的方式使其成為帶命名空間的模塊。",但是我的業(yè)務(wù)暫時(shí)沒有這個(gè)需求也用這個(gè)了,造成了報(bào)錯(cuò)

export default {
  state,
  getters,
  actions,
  mutations
}
  • 解決方法

刪掉代碼中的 namespaced: true

6. 每次 yarn serve 運(yùn)行項(xiàng)目時(shí),控制臺(tái)會(huì)出現(xiàn)一些警告

1. 問(wèn)題一
  • 警告內(nèi)容

    No parser and no filepath given, using 'babylon' the parser now but this will throw an error in the future. Please specify a parser or a filepath so one can be inferred.
    
  • 問(wèn)題解析

    參考文章
    )
    參考如上文章的內(nèi)容,結(jié)論是 vue-loader 的版本問(wèn)題,我看了下項(xiàng)目?jī)?nèi)部 package.json 使用的版本是 14.2.2

  • 問(wèn)題解決

    先去 github - vue-loader 上看了下最新的版本號(hào),在命令行中升級(jí) vue-loader 的版本

    yarn upgrade vue-loader@15.7.1
    
  • 重新啟動(dòng)項(xiàng)目問(wèn)題已解決了

2. 問(wèn)題二
  • 警告內(nèi)容

     caniuse-lit e is outdated. Please run next command `yarn upgrade caniuse-lite browserslist`
    
  • 問(wèn)題解析

    參考文章
    參考如上文章的內(nèi)容,結(jié)論是 刪除 yarn.lock yarn install

  • 問(wèn)題解決

    刪除 yarn.lock 文件和 node_modules 目錄,再執(zhí)行 yarn 重新安裝項(xiàng)目中的依賴(需要注意的是這里默認(rèn)安裝的是所有依賴的最新版本)

    yarn
    
  • 重新啟動(dòng)項(xiàng)目問(wèn)題已解決了

正文(4.x)舊項(xiàng)目升級(jí)問(wèn)題記錄

1. 文件命名造成的引用失敗的問(wèn)題

image.png
  • 如上所示的報(bào)錯(cuò),具體代碼以及目錄結(jié)構(gòu)如下
image.png

image.png
  • 之前舊項(xiàng)目是沒有這樣的錯(cuò)誤的,所以我猜測(cè)是命名的問(wèn)題導(dǎo)致的。

  • 首先我改成如下這樣時(shí)就是好用的

image.png
  • 接著我嘗試修改組件目錄中文件的名稱 Index => index 就是把首字母的大寫改成小寫,然后再重啟代碼,bingo?。。?wèn)題果然沒有了

2. Critical dependency: the request of a dependency is an expression

參考文章:如何解決 Critical dependency: the request of a dependency is an expression ?
依照上述文章內(nèi)容,這個(gè)錯(cuò)誤源自 webpack 的版本問(wèn)題,高版本的不可以在 import 中使用變量

  • 下圖中是修復(fù)前和修復(fù)后的代碼對(duì)比圖
image.png
image.png
最后編輯于
?著作權(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)容

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