淺談vue-cli5關(guān)于yarn的一個小坑
問題
昨天有小伙伴下了我的 DEMO之后反映運行報錯。

因為這個項目環(huán)境我測試過許多次,不管是npm還是yarn都能正常運行,所以聽到運行報錯時下意識地就認(rèn)為是依賴沒有安裝成功的問題,建議他配一個淘寶鏡像。
當(dāng)他把報錯貼上來的時候,我發(fā)現(xiàn)原來真不是依賴的問題,vue-cli拋出了錯誤如下:
Error: The project seems to require yarn but it's not installed.
解決方案
報錯信息已經(jīng)把原因說的很清楚了:這個項目可能需要yarn但是它并沒有安裝。解決方案就我所知有兩種:
- 安裝
yarn - 刪掉
yarn.lock文件
親測這兩種方法都能解決問題,但是正常的多人協(xié)作項目肯定不能用第二種方法,真要這么干了就等著被批斗吧。
原因
問題很快就解決了,但是令我疑惑的是,同樣的依賴如果沒有yarn.lock文件項目運行項目完全是 OK 的。這說明壓根不需要yarn,那為什么vue-cli會認(rèn)為需要yarn呢?
定位后看到錯誤是node_modules\@vue\cli-shared-utils\lib\env.js中的checkYarn方法拋出的,具體代碼如下:
exports.hasYarn = () => {
if (process.env.VUE_CLI_TEST) {
return true
}
if (_hasYarn != null) {
return _hasYarn
}
try {
execSync('yarn --version', { stdio: 'ignore' })
return (_hasYarn = true)
} catch (e) {
return (_hasYarn = false)
}
}
exports.hasProjectYarn = (cwd) => {
if (_yarnProjects.has(cwd)) {
return checkYarn(_yarnProjects.get(cwd))
}
const lockFile = path.join(cwd, 'yarn.lock')
const result = fs.existsSync(lockFile)
_yarnProjects.set(cwd, result)
return checkYarn(result)
}
function checkYarn (result) {
if (result && !exports.hasYarn()) throw new Error(`The project seems to require yarn but it's not installed.`)
return result
}簡單來說,在development環(huán)境下,調(diào)用checkYarn方法后:
- 先執(zhí)行
hasProjectYarn方法,通過path.join生成一個目標(biāo)路徑,例如:D:\GitCode\vue2-typescript-starter\yarn.lock。 - 再通過
fs.existsSync方法來檢測這個路徑是否真實存在。若存在,則調(diào)用hasYarn方法。 hasYarn方法檢查是否安裝了yarn,若沒有,則拋出錯誤The project seems to require yarn but it's not installed.中斷程序。
大致過程便是如此,如果我對細(xì)節(jié)理解不到位,還望指正。
到此這篇關(guān)于淺談vue-cli5關(guān)于yarn的一個小坑的文章就介紹到這了,更多相關(guān)vue-cli5 yarn內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Nginx上部署前端Vue項目的詳細(xì)步驟(超級簡單!)
這篇文章主要介紹了在Nginx上部署前端Vue項目的詳細(xì)步驟,Nginx是一款高效的HTTP和反向代理Web服務(wù)器,作為開源軟件,Nginx以其高性能、可擴(kuò)展性和靈活性廣泛應(yīng)用于Web架構(gòu)中,文中將步驟介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10
關(guān)于SpringBoot與Vue交互跨域問題解決方案
最近在利用springboot+vue整合開發(fā)一個前后端分離的個人博客網(wǎng)站,所以這一篇總結(jié)一下在開發(fā)中遇到的一個問題,關(guān)于解決在使用vue和springboot在開發(fā)前后端分離的項目時,如何解決跨域問題。在這里分別分享兩種方法,分別在前端vue中解決和在后臺springboot中解決。2021-10-10
vue.js實現(xiàn)h5機(jī)器人聊天(測試版)
這篇文章主要為大家詳細(xì)介紹了vue.js實現(xiàn)h5機(jī)器人聊天測試版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07

