【发布时间】:2019-08-13 11:42:35
【问题描述】:
我最近接手的一个项目中有一些 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 包之外还有什么方法可以跨平台吗?
目前运行 yarn 包时在 powershell 中输出的消息是:
'' was unexpected at this time.
【问题讨论】:
-
顺便说一句:错误消息来自
cmd.exe,npm 在 Windows 上默认使用。 -
如果需要跨平台,我建议在 node.js 脚本中重写它,并使用@987654322 shell-out 必要的命令@(或
exec,如果你想要异步)。然后,您可以通过 npm 脚本调用 node.js 脚本,即"package": "node somescript.js" -
或评估(即
node -e ...)从您的 npm 脚本内联的 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 的编码噩梦。我建议你将它(如果可以的话)更改为例如./dist/APP®TV.wgt按照上述 npm 脚本。 -
对于使用 npm 默认 cmd.exe 在仅限 Windows 的环境中运行,您可能需要考虑将您的
package脚本更改为:"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,即省略注册符号加空格字符的组合来否定编码噩梦。
标签: shell powershell npm cmd command-line