4

我一直在关注这篇文章:

如何创建强类型的 npm 包

并一直在尝试设置我的打字稿项目以将其发布到 npm。

这一切似乎都说得通,但没有涵盖的是如何处理d.ts文件。

我的项目看起来有点像这样:

src
  node
    server.ts
  browser
    client.ts
  common
    contracts.d.ts

所以当我用它编译它时"declaration": true"outDir: "dist"我得到:

dist
  node
    server.js
    server.d.ts
  browser
    client.js
    client.d.ts

我的server.ts文件和client.ts文件都有

import {SomeType} from "../common/contracts";

因此,当其他人使用此包时,打字稿编译将失败,因为server.d.ts两者client.d.ts仍然具有此导入。

节点将运行良好client.js,但server.js没有此导入。tsc必须删除d.ts文件的导入。

我想要发生的是将contracts.d.ts文件复制到 dist 文件夹作为构建的一部分。tsc作为构建的一部分,我该如何做到这一点?

当前的解决方法

为了解决这个问题,我目前正在做的是将 my 重命名contracts.d.ts为,contracts.ts这意味着所有必需的文件都存在于 dist 文件夹中,但这确实意味着客户端和服务器都必须加载一个contracts.js仅包含的空文件

"use strict";
//# sourceMappingURL=contracts.js.map
4

2 回答 2

3

我认为我已经想出了一个很好的解决方案。我已将我的声明文件移动到一个 contracts 文件夹中,所以我的项目如下所示:

src
  node
    server.ts
  browser
    client.ts
dist
  node
    server.js
    server.d.ts
  browser
    client.js
    client.d.ts
contracts
    common.d.ts

然后我只在 npm 包中包含 contracts 文件夹并使用../../contracts/common. 此路径在编译时适用于 src 文件夹,在针对此包构建时适用于 dist 文件夹。

于 2016-11-20T11:25:45.487 回答
0

如果合同只是类型,我仍然会在.ts文件中声明它们。还是合同是从其他地方生成的?

于 2016-11-21T07:05:53.063 回答