如何发布具有根 package.json 依赖项的纱线工作区?

skr*_*rat 6 node.js npm monorepo yarnpkg yarn-workspaces

我正在尝试将一个(纱线)工作区从 monorepo 发布到 npm 存储库,并将根项目的依赖项包含在已发布的包中。设置如下:

  • package.json(包含共享依赖项,例如所有工作区使用的单一版本的 React)
  • library/(这是我想要发布的,为了在这个 monorepo 之外使用,发布的 package.json 应包含根依赖项以及库本地)
  • Library/package.json(包含库特定的依赖项)
  • app1/(使用的应用程序)
  • app1/package.json(包含应用程序本地依赖项,并依赖于
  • app2/(使用库的应用程序)
  • app2/package.json(包含应用程序本地依赖项,并依赖于

所以我想做的是cd libraryyarn publish。我期望发生的是,发布的包的工作方式与我的 monorepo 本地应用程序的工作方式完全相同。问题是,yarn 不会合并来自 monorepo root 的依赖项package.json,并且发布的包package.json仅包含来自 library/package.json 的库本地依赖。因此,当任何人安装这个已发布的包时,它都会被破坏,因为它从library/package.json中未列出的包(依赖项)导入模块。

我真的需要编写一个自定义发布 shell 脚本,在运行之前将根的package.json依赖项合并到library/package.jsonyarn publish中吗?

Joh*_*ren 0

可以可靠地放入工作区根目录中的唯一依赖项类型是开发依赖项。

每个包应分别在其 package.json 文件中声明其依赖项。

在安装过程中,yarn 的作用是,它现在会查看所​​有工作区包中的所有依赖项,以创建单个锁定文件,并且不会将多余的依赖项放入包的 node_modules 文件夹中。

如何发布工作区取决于您。我通常编写一个小型 Node.js 脚本来运行每个包的发布命令行。根据您在工作区中放置的内容,您可能希望独立版本化和/或发布包,这将为您提供灵活性。