我今天如何在 package.json 中使用“exports”来嵌套子模块和打字稿
Posted
技术标签:
【中文标题】我今天如何在 package.json 中使用“exports”来嵌套子模块和打字稿【英文标题】:How can I use "exports" in package.json today for nested submodules and typescript 【发布时间】:2022-01-14 16:22:13 【问题描述】:我想利用 NodeJS/package.json 的新 "exports" 功能,以便我可以执行以下操作:
"exports":
".": "./dist/index.js",
"./foo": "./dist/path/to/foo.js"
用户可以执行以下操作:
import foo from 'my-package/foo';
Typescript 4.5 应该 support the "exports" 字段,但它似乎不起作用。我正在使用 TS 4.5.2 构建一个简单的包,并且我正在使用 TS 4.5.2 的项目中使用该包。我查看了其他 SO questions 和 this github thread 和 this bug report 但似乎无法就这个问题以及它今天是否应该工作达成共识。
注意 1:我仍然可以使用更详细的语法进行导入:
import foo from 'my-package/dist/path/to/foo.js';
注意 2:我也尝试了导出的对象表示法,但无济于事:
"exports": ".": "require": "./dist/index.js", "import": "./dist/index.js" , "./foo": "require": "./dist/path/to/foo.js", "import": "./dist/path/to/foo.js"
问题:
-
这个功能现在可以用于 typescript 项目了吗?如果没有,我只想知道。
如果#1 是,我错过了什么?关于 tsconfig 的细节对于源项目和消费项目都很有用。 TS 编译器抱怨
node12/nodenext
被用于 module
或 moduleResolution
字段(我肯定使用 TS 4.5.2)。
更新:TS 4.5 does not support "exports"
(另见this 问题):
... 对 Node.js 12 的支持已推迟到未来版本,现在仅在夜间版本中作为实验标志提供。这不是一个容易的决定,但我们的团队对生态系统的准备情况和如何/何时使用该功能的一般指导感到担忧。
【问题讨论】:
【参考方案1】:不知道您遇到了什么错误,或者 TypeScript 似乎不适合您的其他方式(不知道您为什么不想分享这些重要信息),我可以告诉您您的 exports
部分似乎缺少类型信息。通常,如果您的 .d.ts 文件位于各自的 .js 文件旁边,您的导出部分将如下所示:
"exports":
".":
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
,
"./foo":
"types": "./dist/path/to/foo.d.ts",
"default": "./dist/path/to/foo.js"
【讨论】:
我认为很明显我可以使用文件路径导入,但不能使用我的“导出”的缩短版本。没有错误给你,它只是不起作用。此外,这些类型不是必需的,因为 TS 会在我在问题中引用的文档中提到的代码文件旁边查找.d.ts
文件:devblogs.microsoft.com/typescript/…。无论如何,我试了一下,没有骰子。以上是关于我今天如何在 package.json 中使用“exports”来嵌套子模块和打字稿的主要内容,如果未能解决你的问题,请参考以下文章
在使用Docker构建节点应用程序映像时如何摆脱package-lock.json警告?
在 NodeJs 微服务架构中,我应该为每个服务使用 package.json 吗?
如何在 package.json 中使用 $npm_config_?