一、什么是npm workspace
npm workspace 是一个用于管理多个相互依赖的 Node.js 项目的工具。从本质上讲,它是一个将许多 npm 项目组织在一起的方式,而不是一个新的包管理器。npm workspace 在管理多模块项目方面相对容易操作。
npm workspace 的最终目标是使开发人员可以只在顶层 `package.json` 文件中定义所有项目所需的依赖项和版本。这种方式可以将一组相关的模块放在单个主要版本库中,这些模块可以互相引用。这将有助于简化团队协作,因为团队成员无需在不同的项目之间跳转,并且可以更容易地确保在所有项目中使用相同的依赖关系集合。
二、npm workspace 的安装和配置
要在项目中使用 `npm workspace`,需要安装 `npm` 版本 7.0.0 或更高版本。可以使用以下命令来检查版本:
npm -v
或者,也可以使用以下命令来安装 npm 的最新版本:
npm install -g npm
安装了 `npm` 后,运行以下命令来创建一个新的 npm workspace:
mkdir my-workspace cd my-workspace npm init -y
接着使用以下命令来开启工作区:
npm set-workspace-root .
这个命令将在你的工程目录中根据当前的目录结构配置 `.npmrc` 文件,如下所示:
workspaces-enabled=true
现在你就可以在 `my-workspace` 目录内创建你的项目和子项目了。
三、如何将多个项目纳入同一工作区
工作区根目录下应该有一个空的 `package.json` 文件,表示工作区的根依赖关系,这个文件不依赖其他的平级项目。
在工程目录中,可以通过以下命令将一个新的 node.js 项目添加到工作区中:
npm init
在新建立的项目目录下,也需要一个 `package.json` 文件,记录着该子项目的依赖项、版本号等信息。
将两个项目同时安装到工程目录下的 node_modules 中,可以使用以下命令:
npm install
现在,两个项目就可以互相依赖了,这个将大大提高项目中的复用度。同时,也十分适合中小团队来管理项目。
四、npm workspace 命令的使用
npm workspace 不仅协助管理多个 node 项目,还支持简单的脚本,从而可以在所有子项目中执行操作。以下是一些有用的命令:
- npm run -w
- npm run
--workspaces= :在符合模式的所有子项目中运行指定的脚本。 - npm install
--workspace= :在指定的子项目中安装指定的依赖关系。 - npm install --no-save:安装所有子项目的依赖关系,但不向根级 `package.json` 添加这些依赖项。
五、如何使用 lerna 管理 npm workspace
lerna 是一个管理拥有多个 node 模块的 Git 仓库的工具,可以提供帮助维护项目多个组件之间的依赖关系。
lerna 主要用于管理多模块项目中的 node 模块版本,同时也适用于 npm workspace。启用 lerna 十分简单,只需要运行以下命令:
npm install --global lerna
在工作区根目录下,有一个名为 `packages` 的目录,这里应该存放所有子项目,如以下示例:
my-workspace/ package.json packages/ project1/ package.json project2/ package.json
在工作区根目录下,创建一个名为 `lerna.json` 的文件,内容如下:
{ "packages": [ "packages/*" ], "version": "independent", "npmClient": "npm" }
通过以上配置后就可以使用 `lerna` 命令管理所有子模块了,下面是一些常用的命令:
- lerna bootstrap:安装所有的依赖项并连接相互依赖的包。
- lerna publish:将更改部署到 npm,使用 “version” 字段自动确定要发行的软件包版本。
- lerna exec:在所有子包中执行一条给定的命令,并在成功时返回 0。
- lerna add:为指定的软件包安装和保存 npm 包。
六、小结
通过使用 npm workspace,我们可以更轻松地在一个像样的项目中组织和管理多个 node 模块。它不仅提高了协作效率,而且使我们的项目更加整洁、有序。 lerna 工具进一步简化了多个子项目的操作,提高了工作完成速度。下次你遇到需要同时管理多个 node 项目时,记得使用npm workspace加快开发效率。