【问题标题】:Share code between two local node projects在两个本地节点项目之间共享代码
【发布时间】:2020-08-25 08:16:29
【问题描述】:

我有以下目录结构

./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 文件?如果可能,我宁愿不使用符号链接。

【问题讨论】:

  • 你试过这个 const share = require('./../shared/share.js') 吗?,一旦我遇到相同类型的问题。添加 ./
  • 实际上我做了一个例子,它适用于这种结构。你在 app1 和 app2 中做了npm i 吗?
  • 如果 share.js 不依赖于安装在 app1app2 中的模块会更好。如果它能够独立站立就更好了。如果它有依赖项,则将它们安装在shared 目录中,然后shared.js 可以从自己的目录中加载自己的依赖项。这就是你如何制作一个独立且可重用的模块。
  • 我在这种场景下使用 git 子项目。

标签: javascript node.js


【解决方案1】:

您可以在此处使用的一种解决方案是使用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

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2023-03-29
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多