You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SBT如何从任务运行Node.js包?执行yarn命令报错求助

解决Scala.sys.process调用Yarn时的模块找不到问题

你碰到的这个报错很典型——当你在SBT任务里调用yarn.cmd时,系统默认会从当前项目的node_modules目录里找Yarn的执行文件,但你的项目里并没有本地安装Yarn,所以才会抛出Cannot find module '...\yarn.js'的错误。

下面给你两个可行的解决思路:

思路1:调用全局安装的Yarn

如果你已经通过官方安装包或者npm install -g yarn在系统全局装了Yarn,直接调用全局的yarn命令就行(Windows下scala.sys.process会自动识别可执行文件,不用加.cmd后缀):

lazy val ttt = taskKey[Unit]("Some task")
ttt := {
  import scala.sys.process._
  Seq("yarn", "-v").!
}

要是全局Yarn的路径没加到系统PATH环境变量里,那就写全路径:

Seq("C:\\Program Files\\Yarn\\bin\\yarn.cmd", "-v").!

思路2:在项目本地安装Yarn

如果你的场景必须依赖项目本地的Yarn,先在项目根目录跑npm install yarn --save-dev,把Yarn装到项目的node_modules里。之后用本地的路径来调用:

lazy val ttt = taskKey[Unit]("Some task")
ttt := {
  import scala.sys.process._
  Seq("./node_modules/.bin/yarn.cmd", "-v").!
}

小提示

建议先在命令行手动执行一遍对应的Yarn命令,确认能正常输出版本号后再写到SBT任务里,这样能先排除环境本身的问题。另外Windows系统里写路径记得用双反斜杠转义,或者用Scala的原始字符串"""C:\Your\Path\yarn.cmd"""

内容的提问来源于stack exchange,提问作者Oleg

火山引擎 最新活动