我一直关注这篇文章:
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.ts
和client.d.ts
两者仍然具有此导入。
节点运行正常,但client.js
和server.js
没有此导入。 tsc
必须删除d.ts
个文件的导入。
我想要发生的是将contracts.d.ts
文件作为构建的一部分复制到dist文件夹。我如何在tsc
构建中执行此操作?
我目前正在做的是将contracts.d.ts
重命名为contracts.ts
,这意味着所有必需的文件都存在于dist文件夹中,但它确实意味着客户端和服务器必须加载仅包含
contracts.js
文件
"use strict";
//# sourceMappingURL=contracts.js.map
答案 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
文件中声明它们。或者是从其他地方生成的合同?