如何使用 Bash shell 命令使 npm 项目在 Windows 上工作?

Iva*_*nSt 5 shell powershell command-line cmd npm

我最近接手的一个项目中有一些 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",
}
Run Code Online (Sandbox Code Playgroud)

这个项目是由某人在 MAC 上编写的。我如何将以下部分转换为有效的 Powershell / cmd 命令?我还没有在任何地方找到任何关于此的信息。它运行命令并将回显值附加到它从中调用的字符串。

''./package/$(yarn -s filename)''
Run Code Online (Sandbox Code Playgroud)

或者更好的是,除了这个包之外还有其他方法可以跨平台吗?

目前,运行 yarn package 时在 powershell 中输出的消息是:

'' was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 9

在没有特定于平台的脚本的情况下跨平台的基本选择是:

  • 在 Windows 上也使用 Bash

    • 通过WSL从 Bash 运行您的 npm 脚本,并使用通常包含在package.json文件中的现有 Bash 命令,例如您的情况。

    • 或者,安装Git for Windows 后,将 npm 配置bash.exe为用作调用命令的 shell - 请参阅此答案[npm v5.1+]。

  • 在所有平台(包括 Windows 安装PowerShell(核心),并将命令定义为 PowerShell 命令(见下文)[npm v5.1+]。

请注意 npm 版本要求(版本 5.1 或更高版本),因为使用特定 shell ( script-shell)的配置选项在早期版本中不可用。运行npm -v以获取已安装的版本,并
npm install -g npm在可能的情况下进行更新。


在所有平台上使用 npm 和 PowerShell (Core) [npm v5.1+]:

  • 安装PowerShell 核心。

  • 然后配置 npm 以使用 PowerShell (Core) 作为 shell(需要 npm 5.1 或更高版本):

  • 最后,在您项目package.jsonscripts键中,将命令定义为 PowerShell 命令。

在手头的情况下:

例如,翻译这个 Bash 命令:

yarn package-common && mv './dist/APP® TV.wgt' "./package/$(yarn -s filename)"
Run Code Online (Sandbox Code Playgroud)

注意:我已替换''",因为后者更有意义;正如最初编写的那样,Bash''有效地丢弃了,$(yarn -s filename)如果命令包含空格,命令替换的结果可能会破坏命令。

到这个 PowerShell 命令(v7+):

yarn package-common && mi './dist/APP® TV.wgt' "./package/$(yarn -s filename)"
Run Code Online (Sandbox Code Playgroud)

笔记:

  • mi是 PowerShell 的Move-Itemcmdlet的内置别名。

  • 虽然从 PowerShell调用脚本也很有意义,但这不是必需的 - 从cmd.exe或批处理文件调用也可以。

  • 要开始使用 PowerShell(核心),请参阅学习 PowerShell;此外,http: //hyperpolyglot.org/shellcmd.exe以简洁的表格形式将类 POSIX 的 shell(例如 Bash)的语法与 PowerShell的语法并列。