NPM 模块 + TypeScript 最佳实践

Posted

技术标签:

【中文标题】NPM 模块 + TypeScript 最佳实践【英文标题】:NPM Modules + TypeScript Best Practices 【发布时间】:2016-10-05 00:10:00 【问题描述】:

我想用 TypeScript 编写一个 npm 模块。 有人可以向我推荐一个如何开始的最佳实践指南吗?

我的问题是:

Node.js 不支持开箱即用的 TypeScript,对吧?那么推荐的发布 npm 模块的方法是什么?创建 2 个文件夹 /ts /js 并在 package.json 中引用 js/index.js 作为入口点。或者使用某种运行时转译器​​并直接运行 TypeScript 文件?还是不建议在 npm 模块中发布任何 TypeScript 代码并将其编译为普通 javascript 并在 Git 存储库中提供 TypeScript 源?

推荐的打字支持方式是什么?我看到我可以在我的 package.json 中引用打字文件。他们可以在线吗,我应该为他们提供 npm 模块还是根本不发布 ts 和 dtd 文件?使用类型安装它们并提供typings.json?

如果我想为我的代码提供打字支持,推荐的方法是什么?甚至我的模块都非常小且简单(做一件事并正确完成),提供一些信息和自动完成支持可能很有用。我还是 TypeScript 的新手,所以不确定最好的方法是什么。我猜想写一个接口并将它与我的 npm 模块一起提供。以后这些文件应该上传到DefinitelyTyped 目录还是只对较大的库有意义?

我很想在这里了解如何正确使用当前的 TypeScript 和 Node 版本,因为我发现的很多信息都已过时,涉及 autodts、tsd 等内容。

如果有人可以帮助我,我很高兴。一旦我知道这是如何以正确的方式完成的,我就会制作文档并在 Github 上为其他人提供这些信息。

干杯

【问题讨论】:

你最好把它分成 3 个单独的问题 【参考方案1】:

对于您的第一个问题:是的,您必须先转换 typescript 代码,然后才能发布您的 npm 包,但您可以通过确保在您的 package.json 中有此非常轻松地做到这一点:

  "scripts": 
    "prepublish": "tsc",
  

构建文件的最佳实践是使用例如ts 文件的 src 目录,然后是 js 文件的根级别或其他目录(例如 dist)。您可以通过在 tsconfig.json 中定义“outDir”来进行设置:

"compilerOptions": 
    [...]
    "outDir": "dist"

这里接受的答案中的链接也帮助我解决了类似的问题:Writing NPM modules in Typescript

关于您在 npm 包中输入的问题:为了在当前 typescript 版本中提供输入,您无需更改 package.json 中的任何内容。您只需将名为 index.d.ts 的文件添加到包的根级别即可。如果有人使用你的模块打字稿会自动找到那里的打字。

【讨论】:

以上是关于NPM 模块 + TypeScript 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

npm 包的可安装 typescript 类型定义

在2018年如何优雅的开发一个typescript语言的npm包?

TypeScript NPM 包的目标架构

Building Vue3 + Typescript + without cli 最佳实践

TypeScript NPM包的目标体系结构

集中webpack配置多个项目 - 最佳实践?