Skip to content

feat: exports マップ導入 + ESM 優先構成に刷新する (0.4.0)#18

Merged
april418 merged 2 commits into
masterfrom
feat/exports-esm-packaging
Jun 9, 2026
Merged

feat: exports マップ導入 + ESM 優先構成に刷新する (0.4.0)#18
april418 merged 2 commits into
masterfrom
feat/exports-esm-packaging

Conversation

@april418

@april418 april418 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

概要

im-core のパッケージ構成を exports マップ + ESM 優先に刷新する。0.4.0 として publish する。#17 (types typo 修正・0.3.1) の続きで、main/types が cjs 固定だった構成を現代化する。

変更内容

  • exports フィールドを導入し条件付き解決を定義
    • .import: esm / require: cjs / types: esm
    • ./esm, ./esm/* → esm(既存 consumer が使用)
    • ./cjs, ./cjs/* → cjs(require 系フォールバック)
    • ./package.json
  • module フィールド追加(bundler 向け esm ヒント)
  • types./esm/index.d.ts
  • version: 0.3.1 → 0.4.0

既存 consumer の import パターン(bare . / ./esm バレル / ./esm/XHR 等)を全て維持する非破壊設計。

検証

im-core を参照する全 consumer の node_modules を本ブランチの im-core で差し替え、build/compile が通ることを確認:

consumer ツール import 結果
im-cmp webpack bare . (named)
im-query-param-injector-js tsc imuid 経由 /esm/*
trust360 webpack /esm バレル
livedoor-cdp-client rolldown /esm バレル
beacon.js webpack /esm/*
gpt-secure-signal-provider-js esbuild /esm/*
im-uid-clients-livedoor build /esm/*

im-core 自身: pnpm build ✅ / pnpm lint ✅ / pnpm test 51 passed ✅

既知の制約

esm/*.js は TS 出力が拡張子なし相対 import のため Node ネイティブ ESM では読めず bundler 専用type:"module" を付けると逆に Node ESM が ERR_MODULE_NOT_FOUND で壊れるため付与しない。真の Node-ESM 対応は .js 拡張子を出力するビルド改修が別途必要(フォローアップ)。

マージ後

CI が 0.4.0 を publish。bare import で型の恩恵を受ける im-cmp を 0.4.0 へ更新(別 PR)。subpath のみの consumer は更新不要。

🤖 Generated with Claude Code

april418 and others added 2 commits June 8, 2026 22:38
main/types が cjs 固定だったのを改め、exports フィールドで条件付き解決
(import→esm / require→cjs / types→esm) を定義する。subpath も
明示マップ (./esm, ./esm/*, ./cjs, ./cjs/*) し、既存 consumer の
import パターンを全て維持する。bundler 向けに module フィールドも追加。
version を 0.4.0 へ。

検証: im-core を直接参照する 7 consumer (im-cmp / trust360 /
livedoor-cdp-client / beacon.js / gpt-secure / im-uid-clients-livedoor)
と imuid 経由 tsc の im-query-param で build/compile が全て成功する
ことを node_modules 差し替えで確認済み。

注: esm/*.js は TS 出力が拡張子なし相対 import のため Node ネイティブ
ESM では読めない (bundler 専用)。type:"module" を付与すると逆に Node
ESM が壊れるため付けない。真の Node-ESM 対応はビルド改修が別途必要。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
単一 types (esm) だと require 解決時に CJS 実体へ ESM 版の型を当てる
形になり、attw 等が types/runtime のモジュール形式不一致を警告する。
import→esm/index.d.ts, require→cjs/index.d.ts と条件別に分け、
dual-package の型提供を by-the-book にする。

検証: im-cmp(webpack) / trust360(ts-loader) / im-query-param(tsc) で
build/compile が引き続き成功。require→cjs / import→esm の Node 解決も確認。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@april418 april418 merged commit 46efccc into master Jun 9, 2026
2 checks passed
@april418 april418 deleted the feat/exports-esm-packaging branch June 9, 2026 05:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant