developit / developit/microbundle

package.json types/main/module take precedence over conditional exports

オープン
#1,094 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
JavaScript
スター
8.1k
フォーク
358
PR マージ指標
30日以内にマージされた PR はありません

説明

Possibly somewhat related to #1085.

Given a package.json:

```json
{
"main": "./lib/index.cjs",
"module": "./lib/index.js",
"type": "module",
"dependencies": {
"some-client-with-matching-esm-and-tsconfig": "^x.x.x"
},
"exports": {
".": {
"require": {
"types": "./lib/index.d.ts",
"default": "./lib/index.cjs"
},
"import": {
"types": "./lib/index.d.ts",
"default": "./lib/index.js"
}
},
"./package.json": "./package.json"
},
```
_without root `types` property, running:

```sh
microbundle --target node -f esm --generateTypes=true
```

results in error:

> (rpt2 plugin) Error: /Users/xxxx/dev/project/dependingclient.ts(197,32): semantic error TS2339: Property 'request' does not exist on type 'DependingClient.ts'.
> at RollupContext.error (/Users/xxxx/dev/project/node_modules/rollup-plugin-typescript2/dist/rollup-plugin-typescript2.cjs.js:20259:3

Indicating it cannot find the types specified in the conditional exports.

**Working solution**: Specify `"types": "./lib/index.d.ts"` at root-level.
**Also works**: Remove the `"main"` and `module` property

It seems to me package.json conditional exports are not taking precedence over main/module/types

Not sure if related but when in tsconfig.json `resolvePackageJsonExports` is explicitly set to `true` (even weirder is that it would be true by default in node16 moduleresolution) , regardless of whether `moduleResolution` is set to node16, it throws
> rpt2: options error TS5098: Option 'resolvePackageJsonExports' can only be used when 'moduleResolution' is set to 'node16', 'nodenext', or 'bundler'. Whereas running the build simple with `tsc` causes no issues.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

Reproduce the issue with the package.json example using `microbundle --target node -f esm --generateTypes=true`, then compare the result with `tsc`. Inspect how the build handles the package.json `exports`, `main`, `module`, and `types` fields alongside the tsconfig.json `resolvePackageJsonExports` and `moduleResolution` settings. Done means conditional exports resolve the declared types without requiring a root `types` field.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript, nodejs, rollup, typescript
領域
build-system, tooling
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。