将打字稿代码发布到 npm 时如何处理 d.ts 文件
How do I deal with d.ts files when publishing my typescript code to npm
我一直在关注这篇文章:
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";
所以当其他人使用这个包时,typescript 编译将失败,因为 server.d.ts
和 client.d.ts
仍然有这个导入。
Node 会 运行 正常,因为 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
我想我已经想出了一个很好的解决办法。
我已将声明文件移至合同文件夹中,因此我的项目如下所示:
src
node
server.ts
browser
client.ts
dist
node
server.js
server.d.ts
browser
client.js
client.d.ts
contracts
common.d.ts
然后我将 contracts 文件夹包含在 npm 包中并使用 ../../contracts/common
导入文件。此路径既适用于编译时的 src 文件夹,也适用于构建此包时的 dist 文件夹。
如果合同只是类型,我仍然会在 .ts
文件中声明它们。或者合同是从其他地方生成的?
我一直在关注这篇文章:
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";
所以当其他人使用这个包时,typescript 编译将失败,因为 server.d.ts
和 client.d.ts
仍然有这个导入。
Node 会 运行 正常,因为 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
我想我已经想出了一个很好的解决办法。 我已将声明文件移至合同文件夹中,因此我的项目如下所示:
src
node
server.ts
browser
client.ts
dist
node
server.js
server.d.ts
browser
client.js
client.d.ts
contracts
common.d.ts
然后我将 contracts 文件夹包含在 npm 包中并使用 ../../contracts/common
导入文件。此路径既适用于编译时的 src 文件夹,也适用于构建此包时的 dist 文件夹。
如果合同只是类型,我仍然会在 .ts
文件中声明它们。或者合同是从其他地方生成的?