在将我的打字稿代码发布到npm时,如何处理d.ts文件

时间:2016-11-20 09:57:34

标签: node.js typescript npm npm-publish

我一直关注这篇文章:

How to create strongly-typed npm packages

并一直在尝试设置我的打字稿项目,将其发布到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.tsclient.d.ts两者仍然具有此导入。

节点运行正常,但client.jsserver.js没有此导入。 tsc必须删除d.ts个文件的导入。

我想要发生的是将contracts.d.ts文件作为构建的一部分复制到dist文件夹。我如何在tsc构建中执行此操作?

当前解决方法

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

的空contracts.js文件
"use strict";
//# sourceMappingURL=contracts.js.map

2 个答案:

答案 0 :(得分:3)

我认为我已经提出了很好的解决方案。 我已将声明文件移动到合同文件夹中,因此我的项目如下所示:

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/common导入文件。此路径在编译时从src文件夹起作用,在构建此程序包时从dist文件夹起作用。

答案 1 :(得分:0)

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