mcpField
M
meteor-modern-build-stack

meteor-modern-build-stack

github.com/meteor開発10290 回インストール5 日前に更新
リポジトリ

meteor-modern-build-stack について

meteor-modern-build-stackは、Meteor開発者向けのビルドスタック設定スキルです。Meteorのバンドラー最適化、Rspack連携、設定や移行時の注意点を説明します。

主な機能

  1. 01SWCなどMeteorのビルド最適化を有効化
  2. 02Rspackによるコンパイル連携の設定
  3. 03SWCとRspackの設定ファイルを解説
  4. 04生成ディレクトリとレガシー構成への対応

活用シーン

  1. 01既存アプリでビルド最適化を段階的に有効化
  2. 02アプリコードのコンパイルをRspackへ移行
  3. 03トランスパイラのフォールバックや設定を調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/meteor/agent-skills --skill meteor-modern-build-stack

インストール後、Claude Code で/meteor-modern-build-stackを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
architecture-entrypoints.md
eval-cases.md
meteor-3.6-workspaces.md
meteor-bundler-optimizations.md
rspack-config.md
scaffolds-and-pwa.md

詳細

最新のビルドスタック

最新のビルドスタックは、独立した2つのトラックで構成されています。どちらか一方、または両方を有効にしてください。

  1. Meteor Bundler Optimizations(Meteor 3.3以降)。1つのフラグで、BabelをSWCに、TerserをSWC minifierに、従来のウォッチャーを@parcel/watcherに置き換え、開発時にはレガシーアーキテクチャをスキップします。
  2. Rspack Bundler Integration(Meteor 3.4以降)。AtmosphereパッケージがアプリコードのコンパイルをRspackに委譲します。ツリーシェイキング、ESM、HTTP経由のコード分割、最新のバンドラープラグインを利用できます。

現在のmeteor createのアプリケーションスケルトンでは、どちらも有効になっています。 minimalやlegacyなど、意図的に小規模にしたスケルトンや互換性を重視したスケルトンでは、Rspackまたは最新のフラグが省かれている場合があります。Meteorのバージョンだけから機能を推測するのではなく、生成されたpackage.jsonと.meteor/packagesを確認してください。既存のアプリでは、まず最適化を有効にしてから、アプリコードが標準仕様に準拠していることを確認したうえでRspackを追加してください。

Meteor Bundler Optimizationsを有効にする

package.jsonに追加します。

"meteor": {
  "modern": true
}

これにより、SWC、SWC minifier、最新のウォッチャー、開発モードでのWebアーキテクチャのスキップが有効になります。互換性のないものはそれぞれレガシー版にフォールバックするため、後方互換性があります。

一部の機能を無効にするには、次のようにします。

"meteor": {
  "modern": {
    "transpiler": false,
    "minifier": false,
    "watcher": false,
    "webArchOnly": false
  }
}

または、SWCの適用範囲を設定します。transpiler.excludeApp、transpiler.excludeNodeModules、transpiler.excludePackages、transpiler.excludeLegacyを指定できます。trueまたはパス/正規表現の配列を指定します。

Babelへのフォールバックを診断するために、トランスパイラーの詳細ログを有効にします。

"meteor": {
  "modern": {
    "transpiler": { "verbose": true }
  }
}

[Transpiler] Used Babel for <file> Fallbackを探してください。よくある原因はネストされたインポートです。references/meteor-bundler-optimizations.mdを参照してください。

Rspack統合を有効にする

meteor add rspack

初回実行時に、このパッケージはプロジェクトレベルのRspack設定をインストールします。アプリコードはRspackに移行しますが、Atmosphereパッケージの処理と最終バンドルの生成は引き続きMeteorが行います。package.jsonにエントリーポイントがあり、アプリコードにネストされたインポートがないことが必要です。既存のアプリを移行するには、migrate-to-rspackスキルを使用してください。

.meteor/versions、package.json、ロックファイルを確認してください。RCの組み合わせは、[email protected]と@meteorjs/[email protected]、core/CLI 2.2.7です。リリースの組み合わせと依存関係の最小バージョンを参照してください。 RspackはTypeScriptをトランスパイルします。宣言ファイルの生成と型チェックにはmeteor-typescriptを使用してください。チェッカーの適用範囲を参照してください。

スケルトン、PWA、オフライン動作

新規アプリのスケルトン選択、またはフレームワークに依存しないPWA/Workboxの設定については、スケルトンとサービスワーカーを参照してください。 Meteor 3.6(3.6-beta.0で確認済み)では、--pnpmのワークスペースと--pwaのBlazeスターターが別々に追加されています。どちらも既存のアプリを変換するものではありません。ワーカーがキャッシュするのはシェルとアセットであり、オフライン時のMeteorデータではありません。既存のバンドラー移行は引き続きmigrate-to-rspackが担当します。

SWC設定ファイル

.swcrc > swc.config.js > swc.config.ts

最初に見つかったファイルだけが使用されます。静的な設定には.swcrcを、環境に応じた設定にはswc.config.jsを使用してください。ファイル名は正確に.swcrcである必要があり、config.swcrcではありません。

SWCヘルパーを外部化してバンドルサイズを小さくするには、@swc/helpersをインストールします。

meteor npm install --save @swc/helpers

新規アプリでは、このパッケージがあらかじめインストールされています。通常、それ以上の設定は不要です。Meteorのパイプラインがこのパッケージを検出し、インライン化する代わりにインポートを出力します。本番用またはレガシー用のバンドルでのみヘルパーのインポートが失敗する場合は、.swcrcを変更したり手動でインポートを追加したりする前に、Rspackが生成した出力と最終的なMeteorの出力を確認してください。

SWCキャリアが解決済みの状態でERR_SWC_NATIVE_CACHEが発生する場合は、実行可能なファイルシステム上に、所有権のある絶対パスのSWC_NATIVE_BINDING_CACHEが必要です。ビルドキャッシュのクリーンアップでは修復できません。meteor-debuggingを参照してください。

Rspack設定ファイル

rspack.config.js | rspack.config.ts | rspack.config.mjs | rspack.config.cjs

@meteorjs/rspackのdefineConfigを使用してください。この関数には、ビルドフラグとヘルパーを持つMeteorパラメーターが渡されます。全項目の表と、特に便利なヘルパー(extendSwcConfig、compileWithRspack、compileWithMeteor、extendConfig、splitVendorChunk、persistDevFiles、disablePlugins、enablePortableBuild、setCache)については、references/rspack-config.mdを参照してください。

.meteorignore

バンドラーが監視する必要のないディレクトリを除外します。構文は .gitignore と同じです。任意の階層に配置でき、ルールはそのサブツリーに適用されます。

docs/
design/
cypress/
scripts/
*.md
!README.md

コマンドごとにルールを設定するには、METEOR_IGNORE 環境変数を設定します。

3.6-beta.3 の組み合わせでは、順序付きのユーザー例外、対象に含める親ディレクトリ、個別に生成されるルールについて、 テスト除外の境界を参照してください。

.gitignore をそのまま .meteorignore にコピーしないでください。Meteor が必要としない無関係な大規模ディレクトリは除外しますが、アクティブな Rspack ビルドコンテキストには絶対に一致させないでください。Meteor は最終アセンブリ時に、生成されたメインモジュールとテストモジュールを使用します。

Rspack は _build/、public/build-assets/、 public/build-chunks/、private/build-assets/ も生成します。Meteor 3.5.2 では、build-assets-test や build-chunks-app-test など、使用中のサフィックス付きのバリアントに加え、カスタムのコンテキスト名も対象に含めてください。これらのパスは、再帰的に処理するフォーマッター、リンター、型チェッカー、テスト検出、カバレッジツール、IDE のネイティブな除外設定に追加します。.gitignore だけでは不十分です。

Minifier の管理

"modern": true は Meteor の標準モダン Minifier を選択します。JavaScript Minifier を提供するサードパーティの Atmosphere パッケージは、Rspack がアプリモジュールをコンパイルする場合でも、Meteor の最終アセンブリの一部として残ります。移行前にカスタム Minifier パッケージを洗い出してください。本番出力、ソースマップ、ビルド時間、実行時の動作を比較してから、保持するか削除するかを決めてください。

本番環境での legacy ビルド

3.6-beta.3 または 3.6-rc.0 で、個別の mainModule.legacy または正確なアーキテクチャエントリを使用する場合は、 アーキテクチャエントリポイントを参照してください。 それ以前の統合では、クライアント共通の動作が維持されます。

"modern": true を指定すると、開発環境では web.browser.legacy と web.cordova がスキップされます。 本番環境では、デフォルトで引き続き legacy が配信されます。本番環境でも legacy を除外するには、.meteor/platforms に modern を追加してください。

server
browser
modern

メモリ制限

ツールプロセスの OOM や増加し続けるウォッチメモリへの対処には、バージョン固有の ヒープとキャッシュの確認方法を使用してください。

複数インスタンス

Meteor 3.5.2 では、1 つのコンテキスト内で、開発用、通常のテスト用、アプリ全体のテスト用の出力を分離します(_build/main-dev、_build/test、_build/app-test と、モードサフィックス付きのアセット/チャンク)。ただし、Meteor のキャッシュ、ローカル Mongo、ポートは分離されません。ローカル状態を分離する場合や、同じモードのインスタンスを 2 つ実行する場合は、個別のポートと METEOR_LOCAL_DIR の値を使用してください。以前の統合では、モード間の出力を分離する場合にもこれが必要です。

PORT=3000 METEOR_LOCAL_DIR=.meteor/local-1 meteor run
PORT=3001 METEOR_LOCAL_DIR=.meteor/local-2 meteor run

アンチパターン

  • レガシーアプリで最適化と Rspack を同時に有効にすること。まず "modern": true を有効にし、Babel のフォールバックを整理してから、Rspack を追加してください。
  • _build/、public/build-assets/、 public/build-chunks/、private/build-assets/ 内のファイルを編集すること。これらは自動生成されます。
  • .gitignore によって、コード品質ツールが生成された Rspack の出力をスキャンしなくなると思い込むこと。各ツール固有の除外機構を設定してください。
  • .gitignore を .meteorignore にコピーすること。Git が Rspack の生成した受け渡しデータを除外しても、Meteor はそれを読み込む必要がある場合があります。
  • Rspack を有効にしたという理由だけで、カスタム Atmosphere Minifier を削除すること。まず最終的な本番バンドルをベンチマークしてください。
  • 必要もないのに Rspack の永続キャッシュを無効にすること。これはデフォルトで有効で、再ビルドを高速化する主な要因です。OOM またはキャッシュ関連の Rspack バグを調査する場合に限り、無効にしてください。
  • SWC 設定ファイルに config.swcrc または rc.swc という名前を付けること。読み込まれるのは .swcrc だけです。

関連項目

  • references/meteor-bundler-optimizations.md
  • references/rspack-config.md
  • references/eval-cases.md
  • 既存のアプリを Rspack に変換する場合:migrate-to-rspack スキル。

コメント