欢迎来到代码驿站!

vue

当前位置:首页 > 网页前端 > vue

浅谈vue-cli5关于yarn的一个小坑

时间:2022-09-05 09:56:39|栏目:vue|点击:

问题

昨天有小伙伴下了我的 DEMO之后反映运行报错。

因为这个项目环境我测试过许多次,不管是npm还是yarn都能正常运行,所以听到运行报错时下意识地就认为是依赖没有安装成功的问题,建议他配一个淘宝镜像。

当他把报错贴上来的时候,我发现原来真不是依赖的问题,vue-cli抛出了错误如下:

Error: The project seems to require yarn but it's not installed.

解决方案

报错信息已经把原因说的很清楚了:这个项目可能需要yarn但是它并没有安装。解决方案就我所知有两种:

  • 安装yarn
  • 删掉yarn.lock文件

亲测这两种方法都能解决问题,但是正常的多人协作项目肯定不能用第二种方法,真要这么干了就等着被批斗吧。

原因

问题很快就解决了,但是令我疑惑的是,同样的依赖如果没有yarn.lock文件项目运行项目完全是 OK 的。这说明压根不需要yarn,那为什么vue-cli会认为需要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环境下,调用checkYarn方法后:

  • 先执行hasProjectYarn方法,通过path.join生成一个目标路径,例如:D:\GitCode\vue2-typescript-starter\yarn.lock
  • 再通过fs.existsSync方法来检测这个路径是否真实存在。若存在,则调用hasYarn方法。
  • hasYarn方法检查是否安装了yarn,若没有,则抛出错误The project seems to require yarn but it's not installed.中断程序。

大致过程便是如此,如果我对细节理解不到位,还望指正。

上一篇:Vue中的同步和异步调用顺序详解

栏    目:vue

下一篇:关于vue跳转后页面置顶的问题

本文标题:浅谈vue-cli5关于yarn的一个小坑

本文地址:http://www.codeinn.net/misctech/212797.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有