相关疑难解决方法(0)

How can I use "exports" in package.json for nested submodules and TypeScript?

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 …

javascript node.js npm typescript

30
推荐指数
3
解决办法
2万
查看次数

附带 .mjs 和 .d.ts 但没有 .d.mts 的 Typescript 包 - 如何在启用 ESM 的情况下导入?

介绍

随着Typescript 4.7 中添加的ECMAScript 模块支持,在 TS 构建过程中可能会涉及几个新的文件扩展名.mjs,包括.d.mts. 如果项目启用了此功能,TS 编译器在进行模块解析(定位要导入的文件)时管理起来会更加复杂。新的 ESM 文件扩展名有两种简单的模块:

  1. 模块有.js实现、.d.ts声明文件
  2. 模块有.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)

node.js typescript es6-modules

14
推荐指数
1
解决办法
2万
查看次数

标签 统计

node.js ×2

typescript ×2

es6-modules ×1

javascript ×1

npm ×1