【发布时间】:2017-05-18 02:47:54
【问题描述】:
我从my sample project's 根文件夹运行npm install 以使用package.json 中的脚本构建它。
构建需要当前在 prepublish 脚本中的一些转译步骤,但 npm 版本 4 显示警告说即将发生重大变化,这让我相信 新的 em> prepare 构建事件脚本更具前瞻性。
C:\code\antlr4ts-json>npm install
npm WARN prepublish-on-install As of npm@5, `prepublish` scripts will run only for `npm publish`.
npm WARN prepublish-on-install (In npm@4 and previous versions, it also runs for `npm install`.)
npm WARN prepublish-on-install See the deprecation note in `npm help scripts` for more information.
...
不幸的是,简单地将脚本从 prepublish 移动到 prepare 会破坏向后兼容性:如果有人使用 npm@3 运行 npm install,prepare 中的构建步骤将被忽略。
升级构建时脚本的最佳做法是什么?理想情况下,我想更新我的 package.json,以便 npm install 适用于任何 npm@>=3 ,但也可以生成一个明确的错误消息,表明在使用 npm@3 运行 npm install 时需要 npm@>=4 是完全可以接受的.
Bakground:我试过包括
"engines": { "npm": ">=4.0.0" },
感谢@toomuchdesign(和其他人),我明白为什么这不能满足我的要求; engines 仅检查我的包何时安装作为依赖项,而不是有人从源代码构建它。这是有道理的。
我跟踪了这个计划更改的背景,一直到npm issue #10074,这解释了为什么需要进行重大更改。但是我仍然不清楚如何更好地处理过渡。
【问题讨论】:
-
我已经更新了这个问题,以便更清楚地说明我在这里寻找最佳实践。我还更新了它以指向一个更简单的示例项目github.com/BurtHarris/antlr4ts-json
-
更正示例项目 URL:github.com/BurtHarris/antlr4ts-json
-
注意:我已经将我的解决方案提交到示例项目中。
-
如果您对答案投了反对票,请留言说明原因...
-
这似乎是一个非常大的问题,建议的解决方案看起来可行,但我希望有一个“官方”的 npm 建议。
标签: npm npm-install