您要请求功能还是报告错误?
特征
目前的行为是什么?
无法安装 git repos 子目录中的包。 这是 monorepos 的一种非常常见的情况,并且只是在根 repo 中不能包含 node 包的存储库。
如果当前行为是错误,请提供重现步骤。
不是但是
什么是预期行为?
yarn add
和yarn global add
应该有一个可用的语法,允许添加位于 git repo 子目录内的包。
在测试未发布版本的问题/回归或修复时,使用未发布的代码变得更加容易,比如这张票https://github.com/Microsoft/code-push/issues/428
前任。 受此问题影响的软件包
https://github.com/Microsoft/code-push/tree/master/cli
https://github.com/Microsoft/BotBuilder/tree/master/Node
https://github.com/facebook/react-native/tree/master/react-native-cli
https://github.com/babel/babel/tree/master/packages/babel-cli
相关 npm 问题: https :
请提及您的 node.js、yarn 和操作系统版本。
纱线版本 v1.2.1
节点版本 v8.7.0
macOS Sierra 10.12.6
使用语法指定链接问题中的子目录有几个好主意 (npm/npm#2974)
使用pip的方式使用查询参数git+https://git.repo/some_repo.git?subdirectory=subdir_path#branch
或者git+https://git.repo/some_repo.git#branch?path=subdir_path
虽然我认为大多数 url 解析器不会解析这个。
使用::
因为它不是分支名称的有效标记git+https://git.repo/some_repo.git#branch::subdir_path
git+https://git.repo/some_repo.git#::subdir_path
另一个想法: git+https://git.repo/some_repo.git/subdir_path#branch
。 如果我假设存在此功能,这就是我首先要尝试的。 其他选项需要有人查找语法。
这可能不明确,具体取决于 git 服务器 url 的设置方式。
网址可能类似于
git+https://github.com/yarnpkg/yarn/<subdir_path>#branch
然后就很难说什么是 repo 路径的一部分,什么是 subdir_path
不确定这是否适用于每个 repo,但在 Github 上git+https://github.com/yarnpkg/yarn
和git+https://github.com/yarnpkg/yarn.git
工作。 您可以假设.git/
是子目录之后的任何内容。
不管语法如何,无论哪种方式都有这个功能都会很好。 不过让语法变得直观会很酷:)。
哦,是的,我主要是在谈论其他网站,而不是真正的 github。 抱歉,我的例子不是最好的解释。
关于在 npm 中支持这一点的长时间讨论:
https://github.com/npm/npm/issues/2974
线程中有一些建议的分隔符。
我也希望能够这样做以促进使用包含许多子模块的 monorepo。 我还找到了讨论这个的 #1570。 这是关闭支持https://github.com/yarnpkg/rfcs/issues/15但https://github.com/yarnpkg/rfcs/issues/15不再存在所以很难说如果有的话在那里完成或决定。
所以yarn
还不支持吗?
好吧,没有比发布和使用 npm 包更简单的选择了:(
是的,monorepo 架构的日益流行使其成为一个关键特性。 现在有什么解决方法吗? 关于公共 API 的讨论往往会持续数年之久……
我的 #1 用例是从尚未合并或发布的 monorepo 中提取错误修复。 我经常想保留大部分原始软件包,但通过错误修复来引入其中一个子存储库。 目前我无法做到这一点,而且解决方法很复杂。 能够引用 Github 分支将大大降低阻力。
我知道 npm 有一些人对这个想法非常抗拒,一般来说是 monorepos。 然而,这里的许多贡献者都致力于使用 monorepos 的项目。 我怀疑如果 yarn 实现了这个功能并且它变得足够流行,npm 会效仿。 很多 yarn 的想法后来都在 npm 中实现了。 纱线对我来说是 npm 的 babel。
或者——这可能更疯狂——将有问题的遥控器添加为子模块,然后(可选地将您的项目文件移动到子目录中)然后使用纱线工作区?
我可以确认这有效。
升级到 webpack 4。 Create React App 尚不支持,但有一个 PR 正在等待合并 - 不幸的是 webpack 4 已经改变了它的插件 API。 双重不幸:create-react-app 是包含多个包的存储库。 添加分叉 PR 作为子模块并使用“文件:”语法添加包很有魅力。
通过这项工作,从字面上节省了一整天或更多的工作。
令人担忧的是,由于 monorepos 的普及,这不在 npm 或 yarn 的路线图上。 git+...
语法使对单包项目的贡献变得轻而易举,相比之下,子目录没有它使得对 monorepo 项目的贡献令人头疼。
我同意。 在 git 子模块file:
路由几个月后,它并不理想。 加入其他开发人员更加困难。 我的同事不得不担心初始化和更新子模块。 在他们的辩护中,过去只需运行yarn
即可让自己前进。
Monorepo 支持将是梦想成真。
yarn + lerna(使用 yarn 的工作区)用于管理 monorepos。
从 monorepo 安装的第二个工具并不理想。 它应该是
简单到从单个包 repo 安装包,使用yarn add
...
一般来说,它对 JS 的“小问题”没有帮助。 出现了一个用例。 我们
当现有工具是完美的家时,使用新工具。
2018 年 7 月 1 日星期日晚上 11:34 Frederik Krautwald, notifications @github.com
写道:
yarn + lerna(使用 yarn 的工作区)用于管理 monorepos。
—
您收到此消息是因为您发表了评论。
直接回复本邮件,在GitHub上查看
https://github.com/yarnpkg/yarn/issues/4725#issuecomment-401638034或静音
线程
https://github.com/notifications/unsubscribe-auth/AAjP2lWrm2u8tOiIZQ5D-oKre9BqTj5-ks5uCU6SgaJpZM4P7hjl
.
@Frikki我不相信 lerna 有很多子模块支持,无论如何都不是“消费工具”。
@jwdunne现在我只是npm publish
一个命名空间版本的 fork 并依赖它
你好! 我构建了https://github.com/ramasilveyra/gitpkg来“发布”来自 monorepos 的包作为 git 标签,它可能会有所帮助。
@ramasilveyra看起来非常有用——感谢添加👍
支持 git subdirs 作为安装源的一些消息?
谢谢,
我今天遇到了这个问题,当时我需要yarn add
一个我为 monorepo 编写的尚未被接受/未发布的修复程序。 来自我的 +1。
佛京绝对类型导致同样的问题之王,
每次我分叉这个 git 时,为了准备一个新的拉取请求,我需要依赖我分叉的 git 的子目录。
file://
是目前唯一的解决方案吗?
@UrielCh我能够使用https://github.com/ramasilveyra/gitpkg作为解决方法。 它也可能适用于您的情况。
感谢这个建议,为这个 fork 创建一个新的 git 会很简单。
你好! 我构建了https://github.com/ramasilveyra/gitpkg来“发布”来自 monorepos 的包作为 git 标签,它可能会有所帮助。
这在开始时可能看起来有点 hacky,但经过一些推理后,它似乎是解决问题的合法方法👍
说真的, gitpkg有效! 它在项目存储库中创建标签,并且可以与包含多个包的存储库一起使用。
这促使我放弃npm
因为只有yarn
可以很好地从 Git 中获取。
+1
你好! 我构建了https://github.com/ramasilveyra/gitpkg来“发布”来自 monorepos 的包作为 git 标签,它可能会有所帮助。
刚刚使用了gitpkg
,我认为这是一个很好的解决方案,应该在此用例的文档中添加为注释
我搭建了一个服务https://gitpkg.now.sh/ ,将一个git repo的子文件夹下载为.tgz
文件,这样可以通过yarn和npm安装。 有了这个服务,包用户可以直接使用子目录,不需要包开发者发布子目录。
例如,如果你想在分支next-8-dev
添加
只需使用:
yarn add https://gitpkg.now.sh/babel/babel/packages/babel-core?next-8-dev
也适用于npm install
。
请注意,我必须向@ramasilveyra说声抱歉,因为我的服务名称与他开发的工具冲突,但我之前并不知道。
@EqualMa这看起来很神奇。 我去看看这个。
@EqualMa如果它适用于具有构建步骤的项目,那就
我们还需要 gitpkg 吗? 运行最新的 lerna 并在独立模式下运行时,它将发布每个组件的 git 标签。
@erykpiast最后, GitPkg 服务支持自定义脚本,允许您在安装后或其他脚本中运行构建步骤! 您可以查看文档或尝试在https://gitpkg.now.sh添加自定义脚本
@EqualMa 简直太棒了! 谢谢!
有任何更新吗? 是计划好的还是什么?
@EqualMa太棒了! 很好!
我在尝试分叉一个使用工作区并在同一个 repo 中有多个包的 repo (https://github.com/ianstormtaylor/slate) 时遇到问题。 我只想修改和导入其中一个包。 尝试将yarn add
指向包含单个 package.json 文件的目录会出现错误...
yarn add https://github.com/kr-project/slate/tree/master/packages/slate#e73db650a332fc5ded3fd72cffb1fcd7279b85d7
error https://github.com/kr-project/slate/tree/master/packages/slate: Extracting tar content of undefined failed, the file appears to be corrupt: "Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?"
我也尝试检查已发布的文件,但我的理解是,这是一个问题,即纱线查找仅在 github 存储库的根目录中找到的 tar?
那么是唯一的方法来 fork 一个使用工作区的项目来使用gitpkg
吗? 我有点惊讶似乎没有更多的本地支持。
刚刚遇到了与@jason-krypton 完全相同的问题......尝试使用使用工作区的 repo 的分支,通常我只会添加分支的 git 存储库......现在我猜这是不可能的? 为了更改几行代码,浪费了大量时间。 :-(
我对 ckeditor5 有类似的问题。 我现在正在试用 GitPkg。
所以@LucidDan和其他人。
我发现以下方法有效:
yarn 2.1.X
才能使其正常工作。package.json
下dependencies
或,在我的情况下, devDependencies
:"package-1": "my-org-name/mono-repo-name#head=my-git-branch&workspace=package-1"
令人失望的是,没有办法只让yarn
安装顶级 monorepo 并将所有随附包展开到适当的位置。 也许有,我只是在这里很愚蠢? 如果是这样,有人启发我;-)
最有用的评论
我搭建了一个服务https://gitpkg.now.sh/ ,将一个git repo的子文件夹下载为
.tgz
文件,这样可以通过yarn和npm安装。 有了这个服务,包用户可以直接使用子目录,不需要包开发者发布子目录。例如,如果你想在分支
next-8-dev
添加只需使用:
也适用于
npm install
。请注意,我必须向@ramasilveyra说声抱歉,因为我的服务名称与他开发的工具冲突,但我之前并不知道。