假如我有多个模块,每个模块都有一个package.json,我想抽离出公共package.json,让模块公用继承一个通用的package.json,请问有什么好的实现方法吗?
假如我有多个模块,每个模块都有一个package.json,我想抽离出公共package.json,让模块公用继承一个通用的package.json,请问有什么好的实现方法吗?
在多模块项目中抽离和共享公共的 package.json
并不是一个标准的做法,因为每个 package.json
文件本质上定义了一个独立的 npm 包。然而,你可以通过一些方法来达到类似的效果,即共享依赖项和脚本,同时保持每个模块的独立性。
lerna
或 yarn workspaces
对于多模块项目,lerna
和 yarn workspaces
是两种流行的解决方案,它们允许你在一个仓库中管理多个 npm 包,同时共享依赖项。
package.json
,但依赖项可以在根级别的 package.json
中定义并共享。package.json
,但你可以通过配置 yarn.lock
和根级别的 package.json
来管理共享的依赖项。采用 monorepo(单体仓库)结构,你可以将所有模块放在同一个仓库中,但每个模块仍然保持其独立的 package.json
。通过使用 lerna
或 yarn workspaces
,你可以更高效地管理这些模块及其依赖项。
初始化项目:
创建一个新的项目目录并初始化一个新的 npm 项目。
mkdir my-monorepo
cd my-monorepo
npm init -y
package.json
中添加 "workspaces": ["packages/*"]
(假设你的模块放在 packages
目录下)。创建模块:
在 packages
目录下为每个模块创建一个目录,并在每个目录中初始化一个新的 npm 项目。
mkdir packages
cd packages
mkdir moduleA
cd moduleA
npm init -y
# 重复上述步骤为其他模块(如 moduleB, moduleC 等)
安装依赖:
在根目录下安装所有依赖项。这些依赖项将在所有工作区中共享。
cd ../../
yarn add some-shared-dependency
通过这种方式,你可以有效地管理多模块项目中的依赖项,同时保持每个模块的独立性。虽然每个模块仍然有自己的 package.json
,但你可以通过根级别的配置来共享和管理依赖项。
2 回答4.2k 阅读✓ 已解决
3 回答8.1k 阅读
5 回答1.4k 阅读✓ 已解决
1 回答4.6k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
2 回答5.7k 阅读
4 回答1.2k 阅读✓ 已解决
使用 Yarn Workspaces
1.创建根目录的 package.json 文件: 在项目根目录下创建一个 package.json 文件,并添加 workspaces 字段:
2.创建模块目录: 在 packages 目录下为每个模块创建一个子目录,每个子目录中包含一个 package.json 文件。例如:
3.安装依赖: 在项目根目录下运行 yarn install,Yarn 会自动安装所有模块的依赖,并将它们链接到根目录的 node_modules 中。
使用 Pnpm Workspaces
1.创建根目录的 package.json 文件: 在项目根目录下创建一个 package.json 文件,并添加 workspaces 字段:
2.创建 pnpm-workspace.yaml 文件: 在项目根目录下创建一个 pnpm-workspace.yaml 文件,并添加以下内容:
3.创建模块目录: 在 packages 目录下为每个模块创建一个子目录,每个子目录中包含一个 package.json 文件。例如:
4.安装依赖: 在项目根目录下运行 pnpm install,Pnpm 会自动安装所有模块的依赖,并将它们链接到根目录的 node_modules 中。
补充
Yarn Workspaces
优点:
缺点:
Pnpm Workspaces
优点:
缺点:
总结