如何将yarn add/npm install与monorepos一起使用

Mar*_*ior 4 git node.js npm typescript monorepo

我需要从 GitHub 中的私有 monorepo 下载一个节点包,类似于:

monorepoProject
  --- subProjectA
  --- subProjectB
Run Code Online (Sandbox Code Playgroud)

subProjectA和subProjectB都是 typescript 项目如下图所示:

subProjectB:
 --- dist
 --- src
     --- index.ts
     --- myCode.ts
 --- package.json
 --- README.md
 --- tsconfig.json

Run Code Online (Sandbox Code Playgroud)

这是该项目的链接:

https://github.com/company/monorepoProject 
Run Code Online (Sandbox Code Playgroud)

通过 SSH 克隆:

git clone git@github.com:company/monorepoProject.git
Run Code Online (Sandbox Code Playgroud)

我尝试像这样使用gitpkg :

yarn add 'https://gitpkg.now.sh/company/monorepoProject/subProjectB?commitHash123123'
Run Code Online (Sandbox Code Playgroud)

但我没有成功。如何从 Github 的子目录下载节点包?

rev*_*elt 5

让我们使用我的 monorepo,https://github.com/codsen/codsen \xe2\x80\x94 一堆 npm 包 \xe2\x80\x94 的 monorepo 作为示例。

\n

简而言之,这取决于您所说的“需要下载”是什么意思。另外,您是否需要 script/UMD/IIFE 或 ESM/CJS 构建。

\n

如果您想做出贡献,请在 GitHub 上克隆整个 monorepo,处理特定的子包(cd进入packages/*并使用该包的 npm 脚本,例如test等)。例如,你可以看到很少有人分叉我的 monorepo。他们会到处玩,有时还会从他们的分叉中提出 PR。

\n

如果您想使用 monorepo 子程序之一,理论上来说,维护者应该将其发布到 npm,然后您可以通过正常npm i流程从 npm 使用它。因此,您不必首先将包从 monorepo 中取出。

\n

如果无法使用 from npm,并且您有一个可用的 monorepo,理论上,您可以将每个包的根目录手动符号链接到项目的node_modules. 这很肮脏,但这是可能的。代码片段是这样的:(ln -s /Users/roy/packages/detergent /Users/roy/packages/object-all-values-equal-to/node_modules/detergent这里我符号链接detergentobject-all-values-equal-tonode_modules,因此detergent可以作为依赖项使用)。

\n

现在,这不太可能,但如果您确实需要从 monorepo 中取出程序,假设它尚未发布到 npm,也许它是供内部使用的。在这种情况下,请检查许可证,如果它是宽松的开源许可证,您可以 git 克隆整个 monorepo,将您需要的文件复制粘贴到您的项目 \xe2\x80\x94 中,只需正确属性创建者(通常,将其 MIT 许可证复制粘贴到您的 MIT 许可证下,在同一个文件中,并可能提及哪些文件是他们的) \xe2\x80\x94 确保许可证是开源的,例如 MIT(签入package.json)。挑战将是修补缺失的导入,但这是可以完成的。

\n

例如,我有维护脚本- 如果您想获取它们并在您的 monorepo 中使用它们,您必须通过将我的 MIT 许可证与您的许可证一起存储来复制粘贴相关文件和属性。

\n

如果您需要基于 monorepo 的包来驱动您的 Web 项目,通常您会从 npm 使用该包并使用 webpack 等捆绑程序。在小型项目中,您可能会发现直接从 CDN 获取 UMD/IIFE 脚本或将其保存为本地文件会更快。例如,我构建、提交和 npm-publish IIFE 版本的非 CLI,它们可以从 JSDelivr 和其他人获得。例如,<script src="https://cdn.jsdelivr.net/npm/detergent/dist/detergent.umd.js"></script>

\n

另外,当你说“私有 monorepo”时,我首先将其理解为闭源项目,“私有包”作为 npm使用术语。它不影响整个消费问题,只影响隐私和法律方面。但也许你的意思是“个人单一仓库”或“某人的单一仓库”?

\n

如果它是一个真正私有的 monorepo,一个真正私有的、闭源的企业包,您需要设置凭据,请参阅npm 页面

\n

另外,当您提到GitPkg时。我查了一下,很奇怪。让我们以我的 monorepo 为例,假设您想detergent从 git 获取包。好吧,坏消息,我不提交构建工件(dist/),我只提交源文件,所以沿着这条线的事情npm install \'https://gitpkg.now.sh/codsen/codsen/packages/detergent?main\'是不可能的,因为洗涤剂程序来自 git-ignored (但不是 npm-ignored)dist/文件夹。但是jsDelivr确实会拾取之前发布到 npm 的软件包,例如,请参阅https://www.jsdelivr.com/package/npm/detergent?path=dist \xe2\x80\x94 注意 UMD 和 ESM 构建,但它们来了来自 npm,这不是来自 GitHub 的消耗。

\n

  • 谢谢你!符号链接技巧非常有效——在 monorepo 中构建了子项目,符号链接到外部包的 node_modules 中,一切正常!我尝试“从 monorepo 中提取程序”,但遇到了奇怪的 TypeScript 问题,所以感谢您提供的所有这些选项! (2认同)