我最近接手的一个项目中有一些NPM脚本,如下所示:
{
"package": "yarn package-common && mv './dist/APP® TV.wgt' ''./package/$(yarn -s filename)''",
"package-common": "tizen package -t wgt -s APP -- ./dist && rimraf package && mkdir package",
"filename": "cross-env-shell echo APP_${npm_package_version}.wgt",
}
这个项目是由一个人在MAC上写的。如何将下面的部分转换为有效的Powershell / cmd命令?我在任何地方都找不到关于这件事的任何东西。它运行命令,回显的值被追加到调用它的字符串。
''./package/$(yarn -s filename)''
或者更好的是,除了this包之外,还有其他方法可以跨平台实现吗?
目前在powershell中运行yarn包时输出的消息是:
'' was unexpected at this time.
2条答案
按热度按时间aij0ehis1#
您在没有 * 特定于平台的 * 脚本的情况下进行跨平台 * 的基本选择是:
*在Windows上也使用Bash:
package.json
文件中,例如在您的情况下。bash.exe
作为调用命令的shell-参见this answer [npm v5.1+]。*在所有平台上安装PowerShell (Core)(包括Windows),并将命令定义为PowerShell命令**(见下文)[npm v5.1+]。
请注意npm版本要求(版本5.1或更高版本),因为在早期版本中没有使用特定shell(
script-shell
)的配置选项。运行npm -v
获取安装的版本,npm install -g npm
更新,如果可能。在所有平台上使用npm与PowerShell(Core)[npm v5.1+]:
package.json
的scripts
键中,将命令定义为PowerShell命令。在本案中:
例如,翻译这个Bash命令:
注意:我用
"
代替了''
,因为后者更有意义;正如最初写的那样,''
实际上被Bash * 丢弃 *,如果命令替换$(yarn -s filename)
的结果包含空白,则可能会中断命令。这个PowerShell命令(v7+):
注意事项:
mi
是PowerShell的Move-Item
小程序的内置别名。cmd.exe
或批处理文件调用也可以。cmd.exe
和PowerShell的语法并列。92vpleto2#
我要无耻地宣传我对这个问题的解决方案。我也面临着同样的问题,并决定写一个小工具来一劳永逸地解决这个问题。结果是一个小型的Bash解释器,能够在NodeJS可以运行的所有平台上工作,包括Windows。作为一个不错的奖励,它也支持并行运行任务。
简而言之,你可以用
bake x
替换npm run x
,它会工作。在命令之后指定的所有脚本都将并行运行,如果你安装@samvv/bake
作为依赖项,你也可以在npm脚本中使用它,如下所示:你可以找到源代码here,你可以使用
npm install -g @samvv/bake
安装这个包。请参阅this Medium post以了解有关其工作原理和使用方法的更多信息。我真的希望这对某人有用!