npm 运行 script < 出乎意料

npm run script < was unexpected

我最近阅读了一篇关于生成变更日志的 article,我想将其集成到 package.json 脚本中。

我用正确的项目名称稍微更改了文章中的脚本,并将输出导出到 CHANGELOG.md

 "scripts": {
    "generateChangelog": "git log --pretty=format:'<li> <a href=\"http://git.egt-interactive.com/frontend-games/temporary-test-project/commit/%H\">view commit &bull;</a> %s</li> ' --reverse > CHANGELOG.md"
 },

但是当我 运行 它时,我有以下错误:

< was unexpected at this time.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! temporary-test-project@1.0.0 generateChangelog: `git log --pretty=format:'<li> <a href="http://git.egt-interactive.com/frontend-games/temporary-test-project/commit/%H">view commit &bull;</a> %s</li> ' --reverse > CHANGELOG.md`
npm ERR! Exit status 1

我认为是转义的东西,但我找不到。

很乐意提供一些帮助。提前致谢


编辑

我正在使用 windows,默认情况下,我使用的是 Powershell,但我也尝试使用 cmd 运行 npm run generateChangelog 脚本(均失败)

但是,如果我 运行 相同的 git log... 命令直接在 shell 中运行:

git log --pretty=format:'<li> <a href=\"http://git.egt-interactive.com/frontend-games/temporary-test-project/commit/%H\">view commit &bull;</a> %s</li> ' --reverse > CHANGELOG.md`

I think it's something with the escaping, but I can't find it.

是的,你是对的,这是一个转义问题。

package.jsonscripts 部分中名为 generateChangelog 的脚本更改为以下内容:

"scripts": {
  "generateChangelog": "git log --pretty=format:\"<li> <a href=\\"http://git.egt-interactive.com/frontend-games/temporary-test-project/commit/%H\\">view commit &bull;</a> %s</li> \" --reverse > CHANGELOG.md"
},

注意变化:

  • 单引号 (') 已替换为 JSON 转义双引号 (\")

  • JSON 转义双引号 (\") 已替换为 (\\")

git log --pretty=format:\"<li> <a href=\\"http://git.egt-interactive.com/frontend-games/temporary-test-project/commit/%H\\">view commit &bull;</a> %s</li>\" --reverse > CHANGELOG.md
                        ^^             ^^^^                                                                              ^^^^                               ^^

运行 $ npm run generateChangelog 现在应该 运行 成功通过:

  • Windows Powershell
  • Windows 命令提示符 (cmd.exe)
  • Windows Git Bash
  • *Nix 命令行工具