我最近接手了一个项目,其中有一些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)''
有没有一种方式可以实现跨平台,而不是使用这个软件包?
当前,在PowerShell中运行yarn package时输出的消息为:
'' was unexpected at this time.
cmd.exe
,这是 npm 在 Windows 上默认使用的。 - mklement0execSync
(或者如果您想要异步,则使用exec
)来执行必要的命令。然后,您可以通过 npm-script 调用 node.js 脚本,例如"package": "node somescript.js"
。 - RobCnode -e ...
)_node.js_脚本。例如:"package": "yarn package-common && node -e \"var sh = require('child_process').execSync; var fn = sh('yarn -s filename', {encoding: 'utf8'}); sh('mv ./dist/APP®TV.wgt ./package/' + fn);\"",这将跨平台运行,但是您脚本中最棘手的部分是路径
./dist/APP® TV.wgt中注册符号加空格字符的组合。这是_cmd.exe_的编码噩梦。我建议您将其更改(如果可以)为例如上述npm脚本中的
./dist/APP®TV.wgt`。 - RobCpackage
脚本更改为:"package": "yarn package-common && FOR /F %f IN ('yarn -s filename') DO mv ./dist/\"APP®TV.wgt\" ./package/%~f"
- 这也将涉及将./dist/APP® TV.wgt
路径更改为./dist/APP®TV.wgt
,即省略注册符号加空格字符的组合以避免编码问题。 - RobC