如何让执行npm install package_a时实际安装@myfancyname/package_a
实现方案与相关建议
可实现重定向效果的操作方法
如果你确实需要实现安装旧包名时自动安装新命名空间包,可以按以下步骤操作:
- 发布旧包
package_a的最终版本,清空所有原有业务代码,仅保留package.json配置文件 - 在
package.json的dependencies字段中声明对应版本的@myfancyname/package_a作为依赖,用户执行npm install package_a时,npm会自动将新命名空间下的包作为依赖安装到项目中 - 要支持全局安装的重定向,可在
package.json的scripts中添加postinstall钩子,钩子内执行npm install -g @myfancyname/package_a命令,同时可以在钩子中打印提示信息告知用户包已完成迁移 - 旧包如果有可执行命令,可以直接在
package.json的bin字段把旧命令指向新命名空间包的对应可执行文件,无需额外编写逻辑
更推荐的最佳实践
上述重定向方式会引入不必要的依赖嵌套,也可能在部分特殊npm配置环境下触发安装错误,更推荐使用官方原生方案:
- 执行`npm deprecate package_a@* "本包已迁移到新命名空间 @myfancyname/package_a,请安装新包获取后续维护版本",所有用户安装旧包时,npm会自动在终端弹出红色迁移提示,引导用户主动安装新包
- 在旧包的
README.md顶部显眼位置标注迁移说明,给出新包的安装命令 - 可以在旧包的入口代码中增加运行时警告,用户引入旧包执行代码时,终端自动打印迁移提示,引导用户升级
内容的提问来源于stack exchange,提问作者Giovanni Di Milia
相关产品推荐
相关产品推荐

