NPM可以用于不同的事情
- 前端项目,其中最终工件通常包含所有依赖项。
- 服务端服务,其中node_modules目录可用于运行时服务器代码。
NPM当前将依赖项提升到工作区项目中的根node_modules文件夹。即使他们的新提案https://github.com/npm/rfcs/blob/main/accepted/0042-isolated-mode.md似乎仍然不允许所有依赖项都安装在包旁边的node_modules文件夹旁边。工作区文件夹JSON。您要么必须将根node_modules文件夹复制到父目录,这对于释放多个服务(因为它是共享资源)来说会变得复杂,要么必须合并这两个文件夹,这也不是小事。
当您希望在CI环境中构建,然后将代码和所有依赖项移到其他地方时,这就成了一个问题
有没有人想到他们是如何解决/避免/处理这个问题的?
2条答案
按热度按时间i2loujxw1#
我最后选择了Lerna,因为它似乎能完美地处理这种情况。Lerna基本上独立处理每个“子项目”。
https://lerna.js.org/
我不认为npm workspaces适合这种类型的工作流,或者说它一开始就没有被设计成这样
46scxncf2#
如果你正在使用monorepo,我强烈建议使用pnpm,因为它非常快,类似于npm(感觉很熟悉),并且从第一天起就对monorepos提供了一流的支持(不像npm和yarn)。最重要的是,它可以像您希望的那样在项目级别安装依赖项-从而避免了提升带来的所有问题。
我还推荐一个像turborepo或nx这样的工具来为你的monorepo提供动力(nx现在是lerna背后的引擎)。