monorepo中多个项目之间的共享模块

问题描述 投票:1回答:1

我有一个带有几个项目的小型monorepo(它们共享相同的数据存储,因此将它们一起放在monorepo中进行开发和测试会更容易)。每个项目都在其自己的文件夹中,并带有自己的package.json。每个项目都应独立部署(独立于其他项目)。

我想在项目之间共享一些代码。我想保持它们的相对独立性,所以我宁愿不必在根repo文件夹中创建“构建”步骤,也不必拥有每个项目自己的构建步骤。理想情况下,每个项目的部署将继续在项目的文件夹中完成,而无需了解其他项目。

我知道我可以在回购中创建一个npm模块,并从每个项目中为其创建npm link。这是我所追求的解决方案。但我想知道是否有人有更好的主意。

这里是目录结构的示例:

/package.json
/docker-compose.yml
/project-1/package.json
/project-2/package.json

[如果使用npm link解决方案,我将添加project-shared文件夹之类的东西,并从project-1project-2链接到它。

node.js npm
1个回答
0
投票

这是我目前正在使用的npm链接解决方案。看来这是一个不错的解决方案,所以我认为我将其作为答案。我尚未为该项目实施部署工作,因此我不知道部署将在此方面进行得如何。我希望它将与其他所有组件一起部署链接的模块。

项目目录结构如下:

/package.json
/docker-compose.yml
/project-1/package.json
/project-2/package.json
/project-shared/package.json

在每个项目的package.json(project-1project-2)中,我添加了此后安装脚本:

"scripts": {
  "postinstall": "npm link ../project-shared"
},

因此链接将在项目的常规设置期间创建。

注意:由于某种原因,这在使用preinstall脚本时不起作用(虽然看起来像在运行链接,但不会创建该链接)。 postinstall可以正常工作。

我不太确定共享模块的依赖项安装如何工作(例如,如果项目链接到共享模块时,是否将安装共享模块的依赖项,或者我是否必须独立安装它们)。>>

我遇到的一个问题是Docker Compose在链接的软件包中不能很好地工作(symlinked文件夹不会指向容器内的正确位置)。我通过将共享文件夹安装在node_modules文件夹中的符号链接上来解决此问题。例如,对于project-1

volumes:
  - "./project-1/:/home/node/app:ro"
  - "./project-shared/:/home/node/app/node_modules/project-shared:ro"
© www.soinside.com 2019 - 2024. All rights reserved.