【问题标题】:install @types definition from fork从 fork 安装 @types 定义
【发布时间】:2018-12-12 13:21:57
【问题描述】:
上下文
我 fork DefinitelyTyped 并对一种类型定义进行了解决。此解决方法位于此 fork 中的一个分支上。
此更改不应合并回来,因为它只是一种临时解决方法。
问题
如何通过 npm 或 yarn 安装此自定义类型定义?
问题
- 我不能只安装分支,因为它会安装整个
绝对类型的存储库,而不仅仅是库。
- 理想情况下,我希望以与默认类型定义相同的方式安装它,这样就不需要额外的(全局)配置。
【问题讨论】:
标签:
typescript
npm
yarnpkg
definitelytyped
【解决方案1】:
如果这只是像您说的那样是暂时的(或者可能是一个非常具体的用例),那么将修改后的类型定义复制到项目的存储库中可能是最有意义的。然后,您可以像使用任何自定义类型一样引用这些定义(有关说明,请参阅my other answer)。
【解决方案2】:
这可能是一个耗时的过程,但可行(据我所知)。
使用types-publisher project。
自述文件中的Manually Running 部分涵盖了需要执行的步骤。
Readme 中指定的以下步骤应该足以生成包并将其发布到您的 npm 帐户:
- 更新本地DefinitelyTyped repo
- 解析定义
- 计算版本
- 在磁盘上生成包
- 在磁盘上发布包
- 发布注册表
在 settings.json 中有 scopeName 等于 npm 用户名。
包可以用作npm i @username/package-name
【解决方案3】:
AFAIK,没有一步到位的解决方案,因为 npm 和 yarn 不支持直接从 git 存储库的子目录安装。请参阅npm(可能有更新的)和yarn 的问题以及以前的堆栈溢出问题,包括this one。 (如果您的存储库托管在提供 URL 以下载存储库子目录的 tarball 的服务上,您可以尝试在该 URL 上运行 npm install;我没有采用这种方法。)
我建议您使用Braid(披露:我是 Braid 贡献者)将 DefinitiveTyped fork 的子目录复制到您项目的子目录中,然后在该子目录上运行 npm install(或 yarn add)。 npm 或 yarn 将创建从 node_modules 下的适当位置到子目录的符号链接,因此 TypeScript 无需额外配置即可找到类型声明。由于DefinitelyTyped 存储库不包含用于各个类型包的功能齐全的package.json 文件,因此您可能需要在本地子目录中创建package.json 文件,或者在运行npm install 之前将缺少的字段添加到其中。 (您可以将此更改作为对 Braid 镜像的下游更改。)
我在这个解决方案中看到的唯一缺点是它会在下游存储库中复制类型包,这将永久占用存储库中的一些空间。 (并且 Braid 会将 DefinitiveTyped 的整个历史记录复制到下游存储库的本地克隆中,但该空间可以通过垃圾收集回收。)