I want to take advantage of the new-ish "exports" feature of Node.js/package.json so that I can do the following:
"exports": {
".": "./dist/index.js",
"./foo": "./dist/path/to/foo.js"
}
Run Code Online (Sandbox Code Playgroud)
and users can do the following:
import { foo } from 'my-package/foo';
Run Code Online (Sandbox Code Playgroud)
TypeScript 4.5 should support the "exports" field, yet it does not seem to work. I am building a simple package using TS 4.5.2, and I am consuming that package in a project using TS 4.5.2. I have looked at other SO …
随着Typescript 4.7 中添加的ECMAScript 模块支持,在 TS 构建过程中可能会涉及几个新的文件扩展名.mjs,包括.d.mts. 如果项目启用了此功能,TS 编译器在进行模块解析(定位要导入的文件)时管理起来会更加复杂。新的 ESM 文件扩展名有两种简单的模块:
.js实现、.d.ts声明文件.mjs实现、.d.mts声明文件并非所有包都符合上述类别。有些软件包附带了.js和.mjs版本的实现,但只有.d.ts声明文件,没有 .d.mts
本案的解决规则是什么?它似乎.mjs被优先考虑.js,但拒绝工作,.d.mts如果您不拥有导入的模块,那么如果没有它,就会出现问题。不修改包就可以解决这个问题吗?
对于通过以下配置启用 ESM 的项目
// package.json
"type": "module"
// tsconfig.json
"module": "Node16",
"moduleResolution": "node16"
Run Code Online (Sandbox Code Playgroud)
这取决于一个软件包(例如js-base64),该软件包附带.js, .mjs,.d.ts但没有.d.mts
$ ls -l node_modules/js-base64
base64.d.ts
base64.js
base64.mjs
Run Code Online (Sandbox Code Playgroud)
然后当我尝试导入它时
// myfile.ts
import { Base64 …Run Code Online (Sandbox Code Playgroud)