您的位置:

npm workspace:如何有效管理多个node.js项目

一、什么是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 项目,还支持简单的脚本,从而可以在所有子项目中执行操作。以下是一些有用的命令:

  1. npm run -w :在指定子项目中运行指定的脚本。
  2. npm run --workspaces= :在符合模式的所有子项目中运行指定的脚本。
  3. npm install --workspace= :在指定的子项目中安装指定的依赖关系。
  4. 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` 命令管理所有子模块了,下面是一些常用的命令:

  1. lerna bootstrap:安装所有的依赖项并连接相互依赖的包。
  2. lerna publish:将更改部署到 npm,使用 “version” 字段自动确定要发行的软件包版本。
  3. lerna exec:在所有子包中执行一条给定的命令,并在成功时返回 0。
  4. lerna add:为指定的软件包安装和保存 npm 包。

六、小结

通过使用 npm workspace,我们可以更轻松地在一个像样的项目中组织和管理多个 node 模块。它不仅提高了协作效率,而且使我们的项目更加整洁、有序。 lerna 工具进一步简化了多个子项目的操作,提高了工作完成速度。下次你遇到需要同时管理多个 node 项目时,记得使用npm workspace加快开发效率。