npm 运行脚本 < 出乎意料
Posted
技术标签:
【中文标题】npm 运行脚本 < 出乎意料【英文标题】:npm run script < was unexpected 【发布时间】:2019-08-12 10:05:01 【问题描述】:我最近阅读了一篇关于生成变更日志的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 •</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 •</a> %s</li> ' --reverse > CHANGELOG.md` npm ERR! Exit status 1
我认为它与转义有关,但我找不到。
很高兴得到一些帮助。在此先感谢
编辑
我在 Windows 上工作,默认情况下,我使用的是 Powershell,但我也尝试使用 cmd 运行 npm run generateChangelog
脚本(均失败)
但是,如果我直接在 shell 中运行相同的 git log...
命令,它会起作用:
git log --pretty=format:'<li> <a href=\"http://git.egt-interactive.com/frontend-games/temporary-test-project/commit/%H\">view commit •</a> %s</li> ' --reverse > CHANGELOG.md`
【问题讨论】:
你试过这样用吗?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
@GillesHeinesch 第一次复制它,但我认为它肯定不是一个有效的 JSON,或者至少我的编辑以这种方式用红色突出显示它
您是否尝试使用我评论中的代码?
@GillesHeinesch 是的,但它会引发不同的异常 npm ERR!代码 EJSONPARSE npm 错误! JSON.parse 解析 json 失败
【参考方案1】:
我认为它与转义有关,但我找不到。
是的,你是对的,这是一个逃避问题。
将 package.json 的 scripts
部分中名为 generateChangelog
的脚本更改为以下内容:
"scripts":
"generateChangelog": "git log --pretty=format:\"<li> <a href=\\\"http://git.egt-interactive.com/frontend-games/temporary-test-project/commit/%H\\\">view commit •</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 •</a> %s</li>\" --reverse > CHANGELOG.md
^^ ^^^^ ^^^^ ^^
运行 $ npm run generateChangelog
现在应该通过以下方式成功运行:
【讨论】:
以上是关于npm 运行脚本 < 出乎意料的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 npm install 之后 npm 正在运行准备脚本,我该如何停止它?