OneSDKを v8 にしたが、WebpackでビルドするとSDKが使えなくなる(初期化の失敗)

対象

その他

利用OS

Windows

利用バージョン

OSのバージョン: 11
わんコメ: 8.0.3

内容

OneSDK v7では問題なかったのですが、v8にしたところ、
Webpackでビルドしたものは、初期化失敗してしまいます。
なお、Viteのホットリロード機能では問題なく稼働できています。

もし、初歩的な見落とし等、こちらの間違いがありましたら申し訳ないです:sweat_droplets:

以下、デバッグ結果を生成AIでまとめたものです。

問題概要

OneSDK v8.0.0がWebpack環境でのみ完全に動作不能となる問題が発生。Vite環境では正常動作するが、Webpackビルド時にすべてのエクスポートがundefinedとなり、SDKが使用不可能。

影響範囲

  • Webpack使用プロジェクト: 100%影響(完全使用不可)

  • Vite使用プロジェクト: 影響なし(正常動作)

  • 本番環境: Webpackビルドを使用する場合、デプロイ不可能

技術的証拠

Vite環境(正常)

javascript

=== OneSDK インポート診断開始 ===
✅ Named export成功: class rt { ... }
✅ Default export成功: rt { ... }
Available keys: ['NicoNama', 'DEFAULT_CONFIG', 'OneSDK', 'default']

Webpack環境(失敗)

javascript

=== OneSDK Webpack診断開始 ===
Dynamic import result: Module {__esModule: true, Symbol(Symbol.toStringTag): 'Module'}
Dynamic keys: [] // ← 空配列!エクスポートが存在しない
OneSDK (named): undefined
Default export: undefined

根本原因分析

  1. ビルドツール依存の問題: OneSDKのビルド設定がVite向けに最適化され、Webpack互換性が欠如

  2. モジュールフォーマット問題: ESM/CommonJSの互換性問題

  3. 条件付きエクスポート問題: package.jsonのexportsフィールドでWebpack環境が考慮されていない可能性

検証した対策(すべて無効)

:white_check_mark: Webpack設定の徹底的な調整

javascript

// すべて試行済み - 効果なし
resolve: {
  fallback: { process: 'process/browser.js', /* 他多数 */ },
  fullySpecified: false,
  conditionNames: ['import', 'module', 'browser', 'default']
},
plugins: [
  new webpack.ProvidePlugin({ process: 'process/browser.js' })
]

:white_check_mark: 複数のインポート方法

  • import { OneSDK } - 失敗

  • import OneSDK - 失敗

  • await import() - 失敗

:white_check_mark: Node.js Polyfillの完全導入

すべての必要な依存関係(process, buffer, crypto等)を導入済み - 効果なし

推定される問題箇所

1. package.json の exports設定

json

// 推測される問題のある設定
{
  "exports": {
    ".": {
      "import": "./dist/esm/index.js",  // Vite用
      // "require": "./dist/cjs/index.js" // Webpack用が欠如?
    }
  }
}

2. ビルド設定の問題

  • Rollup(Vite用)設定のみでビルド

  • Webpack用のUMD/CommonJSビルドが欠如

  • 条件付きエクスポートの設定ミス

3. 依存関係の解決問題

  • Node.js専用APIの使用

  • ブラウザ環境での polyfill不足(SDK内部)

情報ありがとうございます
記載された内容は実際に何を動かしているのか、webpackの設定など必要な情報が欠けているため、最小環境のwebpackプロジェクトをgithub等で作成し再現できる環境を頂けると助かります

最低限のプロジェクトを作成しました。

ビルドは成功するものの、
export ‘default’ (imported as ‘OneSDK’) was not found in ‘@onecomme.com/onesdk’ (module has no exports)
と出ており、export default じゃないよ、という指摘を生成AIから受けてます

そのため、
import {OneSDK} from “@onecomme.com/onesdk”
にして、Classで使えと言われましたが、それだと別のエラーが出ます

こんな感じでよろしいでしょうか・・?

状況把握しました
webpackからの参照がimportを用いている場合にも常にbrowser向けのものを要求するのが原因のようです
viteの場合はこれを適切に処理するので問題は発生しないのだと思います

どこが原因でそれを参照するのかまで追ってはいませんが、webpack.configにいずれかを設定することで解消できるかと思います

■ Aliasで強制的にmjsを参照させる

{
  resolve: {
    alias: {
      '@onecomme.com/onesdk': path.resolve(
        './',
        'node_modules/@onecomme.com/onesdk/dist/onesdk.mjs'
      )
    }
  }
}

■ 参照からbrowserを外す

{
  resolve: {
    conditionNames: ['import', 'require', 'default'], // 'browser' を除く
  }
}
「いいね!」 1

助かりました。解決です。
conditionNames: [‘import’, ‘require’, ‘default’],
と、 ‘browser’ を除くことで正常に稼働しました。
ありがとうございました。