npm创建monorepo项目及常用命令
最近刚接触 monorepo ,记录一下目前用到的一些脚本命令。
假设最终需要的项目结构如下:
my_project
│
├── node_modules
├── package.json
├── packages
│ ├── a
│ ├── b
│ └── c
注意:下面所有的命令都是在 my_project 目录下执行的。
注意:workspace 是 npm v7.x 新增的功能,所以需要确保你的 npm 版本大于等于 7.0
1. 创建项目
- 创建
my_project
目录 - 在该目录下打开终端,并执行:
$ 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