npm workspace 相互引用
在使用 npm workspaces 时,你可以在一个 monorepo 中管理多个包,并且这些包可以相互引用。以下是如何设置和管理 npm workspaces 以及实现包之间相互引用的步骤:
首先,创建一个新的项目目录并初始化一个新的 npm 项目:
mkdir my-monorepo
cd my-monorepo
npm init -y
package.json
在根目录的 package.json
中,添加 workspaces
字段来定义工作空间:
{
"name": "my-monorepo",
"version": "1.0.0",
"private": true,
"workspaces": [
"packages/*"
]
}
在 packages
目录下创建两个子包,例如 package-a
和 package-b
:
mkdir -p packages/package-a
mkdir -p packages/package-b
然后在每个子包目录下初始化各自的 package.json
文件:
cd packages/package-a
npm init -y
cd ../package-b
npm init -y
假设 package-b
依赖于 package-a
,你需要在 package-b
的 package.json
中添加对 package-a
的依赖:
{
"name": "package-b",
"version": "1.0.0",
"dependencies": {
"package-a": "1.0.0"
}
}
回到项目根目录,运行 npm install
。npm 会自动处理工作空间中的依赖关系,并在 node_modules
中创建符号链接。
cd ../../
npm install
现在你可以�� package-b
中引用 package-a
。例如,在 package-b
中创建一个 index.js
文件,并引用 package-a
:
// packages/package-b/index.js
const packageA = require('package-a');
console.log(packageA);
假设 package-a
导出一个简单的函数:
// packages/package-a/index.js
module.exports = () => {
return 'Hello from package-a';
};
然后在 package-b
中使用这个函数:
// packages/package-b/index.js
const packageA = require('package-a');
console.log(packageA()); // 输出: Hello from package-a
你可以在 package-b
目录下运行 index.js
文件来测试相互引用:
cd packages/package-b
node index.js
通过以上步骤,你可以在 npm workspaces 中设置和管理多个包,并实现包之间的相互引用。这种方式有助于在 monorepo 中高效地管理和共享代码。