我正试图将一个(yarn)工作区从monoreto发布到npm存储库,并在发布的包中包含根项目的依赖项。设置如下:
- package.json(包含共享依赖项,例如所有工作区都要使用的React的单个版本)
- library/(这是我想要发布的,为了在monoreto之外使用,发布的package.json应该包含根依赖项和库本地)
- library/package.json(包含特定于库的依赖项)
- app1/(使用库的应用程序)
- app1/package.json(包含应用程序本地依赖项,依赖于库)
- app2/(使用库的应用程序)
- app2/package.json(包含应用程序本地依赖项,依赖于库)
所以我想做的是cd library
和yarn publish
。我期望的是,发布的包将以与我的monorepo本地应用程序完全相同的方式工作。问题是,yarn没有合并monoreo的根package.json
的依赖项,并且发布的包的package.json
只包含library/package.json的库本地依赖项。因此,当任何人安装此发布的library包时,它将被破坏,因为它从library/package.json.中未列出的包(依赖项)中导入模块
在运行yarn publish
之前,我真的需要编写一个自定义的发布shell脚本,将根package.json
的依赖项合并到library/package.json中吗?
唯一可以可靠地放入工作区根目录中的依赖项类型是dev依赖项。
每个包都应该分别在其package.json文件中声明其依赖项。
yarn在安装过程中所做的是,它现在查看所有工作区包中的所有依赖项,以创建一个锁文件,并且不会将多余的依赖项放在包node_modules文件夹中。
如何发布工作区取决于您自己。我通常会编写一个小型Node.js脚本来为每个包运行发布命令行。根据您在工作区中放置的内容,您可能希望独立地版本和/或发布包,这将为您提供灵活性。