我应该将外部库的 TypeScript 定义文件检查到 git 中吗?

Posted

技术标签:

【中文标题】我应该将外部库的 TypeScript 定义文件检查到 git 中吗?【英文标题】:Should I check my TypeScript definition files for external libraries into git? 【发布时间】:2015-12-21 21:41:54 【问题描述】:

我正在使用 TSD 来管理我正在开发的 Web 应用程序的 TypeScript 定义文件。

除了tsd.json 文件之外,我还应该将我正在使用的外部库(通过 Bower 管理)的 TypeScript 定义文件检查到 git 中吗?

对于 Bower 和 NPM 依赖项也存在类似的讨论,其中 NPM documentation 表示不,并且 afaik Bower 不再给出建议(过去说 yes)。

定义文件非常轻量,所以我倾向于将它们签入。有什么意见吗?

【问题讨论】:

【参考方案1】:

如果开发人员在检查您的存储库后应该运行npm install,为什么不让tsd install 自动运行?在package.json 中添加到scripts 很容易:

// package.json
"scripts": 
  "postinstall": "tsd install"

不签入生成的文件和依赖项的理由不仅仅是为了减轻存储库的重量。这也是关于信任脚本以保持最新状态,而不是人为决定。当生成的文件发生微小变化时,它可以减少提交中的噪音。

可能会提出相反的论点:如果您担心tsd 资源会丢失,则将它们签入您的回购将防止这种情况发生。但是偏执狂也应该检查 npm 模块。

【讨论】:

请注意...由于 npm 脚本在路径中运行 w/node_modules/.bin,因此其他开发人员无需全局安装 tsd。 (除非他们正在向 repo/项目添加新定义) @Brocco 那是“缺失的链接”!我在问题中没有提到的一个原因是我不想要求开发人员在全球范围内安装tsd。谢谢! 怎么知道开发者全局安装了tsd?您是否将其包含在 npm 的 package.json 的 devDependencies 中? @danfromisrael 根据 Brocco 上面的评论,tsd 不必全局安装即可作为 npm 脚本运行。 我不认为.d.ts文件在所有情况下都应该被检入git,但是当用户npm install发布的包时postinstall不会也运行?对于只想在自己的项目中使用转译的 javascript 的用户来说,这似乎是一个不必要的步骤。【参考方案2】:

是的,

由于我在 tsconfig.json 中包含“typings/tsd.d.ts”,它现在是构建过程的一部分, 而且我不会用 "typings/" 的子目录来维护 .gitignore ,简单的更好......

它更像是一个投票,一个答案:)

例如:我最近从 npm 包中添加了一个项目定义,而不是明确键入的 repo,但我将它添加到了 typings/tsd.d.ts 中,因为它是我在 tsconfig.json 中引用的唯一定义文件。 .. ergo 我不能再在 tsd 中中继以保持定义同步,然后.. 签入... 我可以简单地添加另一个定义文件,选择任意放置它的位置并引用这个另一个定义文件编译,但工作更复杂,结果相同,但只有一个文件来保持引用链工作。

【讨论】:

以上是关于我应该将外部库的 TypeScript 定义文件检查到 git 中吗?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 - typescript 函数与外部 js 库的通信

如何在 TypeScript 定义文件中使用外部模块的类型?

带有泛型的 Typescript 箭头函数的语法错误

使用带有 Vue 和 TypeScript 类装饰器语法的外部定义组件

Vue.js 自定义指令使用 TypeScript 检测点击外部元素

使用 WebPack + TypeScript 定义导入的外部模块