发布于 1 年前 ,更新于 1 年前 npm

npm创建monorepo项目及常用命令

最近刚接触 monorepo ,记录一下目前用到的一些脚本命令。

假设最终需要的项目结构如下:

my_project
│ 
├── node_modules
├── package.json
├── packages
│   ├── a
│   ├── b
│   └── c

注意:下面所有的命令都是在 my_project 目录下执行的。

注意:workspace 是 npm v7.x 新增的功能,所以需要确保你的 npm 版本大于等于 7.0

1. 创建项目
  1. 创建 my_project 目录
  2. 在该目录下打开终端,并执行:
$ npm init -y

注意:-y 表示跳过命令询问直接创建项目。下面用到的 -y 也是同样的意思。

2. 创建 a、b、c 三个模块包

分别执行命令(一个一个创建):

$ npm init -w packages/a -y
$ npm init -w packages/b -y
$ npm init -w packages/c -y

也可以简单点,用一条命令:

$ npm init -w packages/a -w packages/b -w packages/c -y
3. 给某个模块包安装依赖

a 模块安装 axios 依赖:

$ npm install axios --workspace a

# 也可简写为
$ npm i axios -w a
4. 给所有模块同时安装某个依赖

给 a、b、c 三个模块包都安装 dayjs 依赖

# 注意 workspaces 这里多个 `s`
$ npm install dayjs --workspaces

# 也可简写为
$ npm i dayjs -ws
5. 将 b 模块作为 a 模块的依赖

在将 b 模块作为 a 模块的依赖之前,需要确保执行过 npm install (即让 packages 里面的所有模块都软链到 node_modules 目录下),之后就可以在 a 模块中直接使用 b 模块,如:

// 在 a 模块中的某个 js 文件使用 b 模块
const b = require('b')

暂时没找到通过 npm 命令将 b 依赖写入到 package.json 中的 dependencies 里面的方法。

但是如果是使用 yarn 的话,是可以做到的。可以通过:

$ yarn workspace a add link:packages/b

执行上面命令后,最终 package.json 中的依赖为:

{
  "dependencies": {
    "b": "link:packages/b"
  }
}
6. 移除依赖

将 a 模块中的 axios 依赖移除:

$ npm un axios -w a
7. 执行模块里面的 scripts

假设 a 模块包里面的 package.json 文件中 scripts 字段为:

{
  "scripts": {
    "dev": "node index.js"
  }
}

那么可以通过下面的命令启动 a 模块包里面的 dev 脚本

$ npm run dev -w a
© 2016 - 2023 BY 禾惠 粤ICP备20027042号