現在配布されている live2dcubismcore.js
は Live2DCubismCore
というグローバルの名前空間に各種機能を公開していますが、ビルドを前提としたモダンなWeb開発環境とは相性が悪く使いづらいです。
JavaScript モジュール (MDN)に準拠した形式のものを公開してほしいです。
AS-IS
かつての jQuery のような、2000年代の古いライブラリはこれと同じ形式となっています。
// legacy/live2dcubismcore.js
var Live2DCubismCore;
(function (Live2DCubismCore) {
var Moc = /** @class */ (function () {
// ...
}());
Live2DCubismCore.Moc = Moc;
})(Live2DCubismCore || (Live2DCubismCore = {}));
// main-legacy.js
/// <reference path="./live2dcubismcore.d.ts" />
// <script> タグで先に `legacy/live2dcubismcore.js` を読み込むと
// グローバル変数 Live2DCubismCore が定義された状態となる。
const { Moc } = Live2DCubismCore;
<!-- ライブラリの読み込み -->
<script src="./legacy/live2dcubismcore.js"></script>
<script src="./main-legacy.js"></script>
TO-BE
npm で公開されている JavaScript ライブラリの多くはこれと同じような形式になっています。
// module/live2dcubismcore.js
class Moc {
// ...
}
export { Moc };
// main.js
// ライブラリの読み込み
import { Moc } from './module/live2dcubismcore.js';
<!-- type="module" が付いていることに注意 -->
<script type="module" src="./main.js"></script>
<!-- Internet Explorer 向けに従来のコードへフォールバックすることも可能 -->
<script nomodule src="./legacy/live2dcubismcore.js"></script>
<script nomodule src="./main-legacy.js"></script>
メリット
- モジュールバンドラに読み込んでツリーシェイキングが可能となる。
- JavaScript のみでライブラリの読み込みが完結するため、 HTML から読み込む JavaScript ファイル の読み込み順を気にする必要が無くなる。
- JavaScript モジュールは ES2015 で登場した機能であり、今後の JavaScript ライブラリの標準になることが見込まれる。
デメリット
- Internet Explorer では動作しない。
- Internet Explorer は 2022年6月16日付で Microsoft によるサポートが終了する予定となっています。
- 従来形式と読み込みの互換性が無く、破壊的な変更となる。
実現方法(案)
主に TypeScript や Emscripten の設定を変更することで実現可能であると思われます。
参考として、ひとつのコードベースから従来形式とモジュール形式の2つを生成するサンプルリポジトリを作成しました。参考になる部分があれば幸いです。