如何使用 typescript 编译器选项覆盖 package.json `type`?

问题描述 投票:0回答:1

TypeScript 的

--module node16 --moduleResolution node16
选项

  1. 启用节点导入子路径导出条件导出
  2. 强制节点的强制文件扩展名
  3. 根据 package.json type: module
    .mjs
    文件扩展名
     发出 esm 
  4. cjs

当模块发出 commonjs 或 ecmascript 模块但我不知道如何双重发布时,这是完美的。

条件导出允许我们为 
require
import

 定义不同的入口点
"exports": { "import": "./dist/esm/index.mjs", "require": "./dist/cjs/index.js" },

但是为了将 esm 发送到 dist/esm 并将 cjs 发送到 dist/cjs,我需要更改文件扩展名或构建之间的 package.json 类型,因为上面的第 3 点。

是否有打字稿编译器选项来覆盖 package.json 类型或文件扩展名并在使用 
node16
 模块时发出特定格式? 
esnext
es2022

选项不起作用,因为它们不会启用第 1 点或第 2 点。
node.js typescript es6-modules
1个回答
0
投票

是否有打字稿编译器选项来覆盖 package.json 类型或文件扩展名并在使用 node16 模块时发出特定格式?

不。反正还没有。

TypeScript 团队keeptalking关于双重构建支持,但太忙于讨论实现。他们似乎并不真正喜欢双包,并且他们继续“拒绝重写说明符”。然而,有一名团队成员正试图改变他们的观点。他们似乎需要两个 package.json 文件,这感觉非常像反模式,特别是因为 Node.js 支持 exports

 字段。

正如您所指出的,您能做的最好的事情就是创建两个 package.json 文件,以便在构建到

type

(或 
--module node16
)时可以推断出它们 
nodenext
。有关如何运行双重构建的示例,包 
@knighted/duel 支持仅使用一个 package.json 和 tsconfig.json 与 tsc
 进行双重构建,方法是使用另一个 
type
 动态创建第二个 package.json双构建。 
说明符也用@knighted/说明符重写。 notes 还提供了有关 TypeScript 当前对双重构建的支持的更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.