首页 > 解决方案 > 在两个本地节点项目之间共享代码

问题描述

我有以下目录结构

./app1/app1.js
./app1/package.json
./app1/node_modules
./app2/app2.js
./app2/package.json
./app2/node_modules
./shared/share.js

app1 和 app2 都拉入 share.js

// app1.js
const share = require('../shared/share.js')

share.js使用 app1 和 app2 中定义的模块package.json

// share.js
const toml = require('toml')

跑步时node app1.js

Error: Cannot find module 'toml'

如何在这些应用程序之间共享 share.js 文件?如果可能的话,我宁愿不使用符号链接。

标签: javascriptnode.js

解决方案


您可以在此处使用的解决方案之一是使用yarn workspaces

这将允许您在应用程序之间共享您的包,因此您可以具有如下结构:

- project1
-- package.json (deps for project1)
- project2
-- package.json (deps for project2)
- sharedPackage
-- package.json (deps for shared)
- package.json  (your root of project deps where you define workspaces)

现在您可以将共享包用作常规依赖项!

在你内心的某个地方project1/package.json

"dependencies": {
  "sharedPackage": "1.0.0"
}

并在项目中使用project1/index.js

const shared = require('sharedPackage');
shared.doSomething();

Yarn 将了解您在工作空间内的依赖关系,因此它会让您包含它们并轻松完成所有链接。更重要的是,您甚至可以将您的共享包发布到某个包注册表(NPM/Github/whatever)并使其成为一个包。

这将完成工作,但如果您正在寻找一些更具可扩展性的解决方案来管理依赖项,我真的建议您尝试lernarush


推荐阅读