首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >升级npm@>=4的npm `prepublish`脚本的最佳实践

升级npm@>=4的npm `prepublish`脚本的最佳实践
EN

Stack Overflow用户
提问于 2017-05-18 10:47:55
回答 2查看 2.8K关注 0票数 20

我从my sample project's根文件夹运行npm install,使用package.json中的脚本构建它。

构建需要几个当前在prepublish脚本中的转换步骤,但是npm version4显示了一个即将发生重大变化的警告,这让我相信新的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,这解释了为什么需要一个突破性的更改。然而,我仍然不清楚如何更好地处理过渡。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-23 21:53:36

我找到了一个使用check-node-version的更好的解决方案;该包有一个命令行界面,使其易于使用。以下是我建议的最佳实践步骤:

  1. 使用npm install -D check-node-version@1添加开发依赖项,
  2. 将现有的prepublish脚本重命名为prepare
  3. 添加替换的prepublish脚本以处理向后兼容性,并建议升级npm (见下文)

我的package.json现在看起来像这样:

"scripts": {
    "prepare": "npm run antlr4 && tsc",
    "prepublish": "check-node-version --npm \">=4\" || npm run prepare",
    "antlr4": "rimraf gen && antlr4ts Json.g4 -o gen -visitor",
    ...
},
"devDependencies": {
    "check-node-version": "^1.1.2",
    ...

使用这种方法:

  • npm install始终运行prepare脚本,即使安装了npm@3也是如此。如果安装了npm@5npm@3甚至有一条关于升级npm的有用消息,这应该可以正常工作,但是因为脚本使用|| npm run prepare来模拟更高版本的行为,所以脚本会在出现错误后继续运行。
  • 如果我以后想要对npm@4进行硬依赖,如果在npm@3.

上运行,删除|| npm run prepare部件将导致脚本停止

下面是使用npm@3构建的样子

C:\code\antlr4ts-json>npm i

> antlr4ts-json@1.0.6-alpha prepublish C:\code\antlr4ts-json
> check-node-version --npm ">=4" || npm run prepare

node: v6.9.1
npm: v3.10.10
Error: Wanted npm version ">=4" (>=4.0.0)
To install npm, run `npm install -g npm@>=4`

> antlr4ts-json@1.0.6-alpha prepare C:\code\antlr4ts-json
> npm run antlr4 && tsc
票数 12
EN

Stack Overflow用户

发布于 2017-05-22 16:57:06

NPM docs指出,只有当您的软件包作为依赖项安装时,engines字段才会转换错误:

除非用户设置了engine-strict配置标志,否则引擎字段仅在您的软件包作为依赖项安装时才会产生警告。

作为项目的开发人员/管理员,您应该不会看到来自engines字段的任何警告。

由于只在运行npm install时需要编译文件,因此可以简单地使用postinstall钩子。

还请注意,prepublish会一直存在,它只会在publish钩子之前触发,从而改变它在npm@5上的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44037774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档