指定Yarn用于运行脚本的shell。

48 浏览
0 Comments

指定Yarn用于运行脚本的shell。

我的package.json文件中有一个脚本,如下所示:\n\"buildTslint\": \"node_modules/typescript/bin/tsc node_modules/awesomeLibrary_node_tslint/{,helpers/}*.ts\",\n请注意{,helpers/}*.ts这部分,这被称为花括号展开,只能在bash中使用,而不能在sh中使用。\n当运行yarn buildTslint时,我得到以下输出:\n

# yarn buildTslint
yarn buildTslint v0.22.0
$ node_modules/typescript/bin/tsc node_modules/awesomeLibrary_node_tslint/{,helpers/}*.ts
error TS6053: 文件 'node_modules/awesomeLibrary_node_tslint/{,helpers/}*.ts' 未找到。
error 命令执行失败,退出码为2。

\n看起来Yarn使用sh来执行这些脚本,但我想在这里使用bash,以便能够使用花括号展开。

0
0 Comments

问题出现的原因是Yarn目前还没有提供一种配置运行脚本时使用的默认shell的方法。然而,由于yarn使用Node来生成其进程,可以通过更改Node本身使用的默认shell来解决这个问题。

在Ubuntu上,如果您拥有root权限,可以通过更改符号链接/bin/sh来指向除dash之外的其他内容来实现:

sudo ln -sf /bin/bash /bin/sh

在Windows的Git-bash中,您可以将COMSPEC环境变量更改为其他内容而不是C:\Windows\system32\cmd.exe,但这对我来说并没有起作用。

您可以参考以下链接了解更多信息:

- Force node to use git bash on windows: https://stackoverflow.com/questions/35462422

此问题的链接已于2018年初得到解决。因此,我认为`yarn config set script-shell bash`应该可以解决问题。

0
0 Comments

问题的出现原因是Yarn在运行脚本时使用了默认的shell(/bin/sh),而不是用户想要的shell(比如bash)。这可能导致脚本无法按预期执行。

解决方法是将命令更改为使用bash来运行,可以通过修改命令为“bash -c 'command ..'”来实现。这样Yarn将使用bash作为默认的shell来执行脚本。

但是,这种解决方法只是针对当前的命令,如果想要设置默认的shell,以后不再出现这个问题,似乎并没有直接的方法可以通过Yarn的系统调用来设置默认的shell。这是Yarn的具体实现方式决定的,并且根据man手册中的说明,系统调用和exec函数使用的是/bin/sh作为默认的shell。

因此,目前来看,似乎不能通过Yarn的系统调用来设置默认的shell。

0
0 Comments

Yarn在1.19版本中新增了一个配置参数`script-shell`,用于指定运行脚本的shell。现在可以通过以下方式来使用该参数:

设置为`/bin/bash`:

yarn config set script-shell /bin/bash

重置为默认值:

yarn config delete script-shell

让Yarn使用Powershell(在Powershell中运行以下命令):

yarn config set script-shell (Get-Command powershell.exe).Definition

官方文档在哪里?在v1的文档中找不到这个信息。

今天你救了我,谢谢!

0