私はTypescript、ES6モジュール構文、SystemJS/builderを使用しています。Systemjsバンドルグローバルインポートコンフィグ
私がやろうとしている基本的な要件は次のとおりです。
- はES6モジュールのインポート構文(例えば
import * as _ from 'lodash'
)使用@typesパッケージ(グローバルNPMは、同様のインストール用) - を使用してtypescriptですコード補完を有効にします
- ビルダーは、ビルドからグローバルを除外して、dev/productionのCDN URLを使用して正しくインポートします。
私はちょうどそれを取得していくために、ビルドおよびDEV /生産ENVのために使用しています:configと
System.config({
meta: {
"lodash": {
"format": "global",
"build": false,
"exports": "_"
}
// ...more meta
},
map: {
"lodash": "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js",
// ...more maps
}
});
ここからは私がES6にtranspilesしてから、すべてを束ねるNPMタスクを持っていますbabelプラグインを使用して1つのファイルに変換します。スクリプトは、本番ページに直接ロードされ、ロードされます。問題は、かつて私が原因私は変更に成功してきた
{default: _ } //_ is the actual lodash export
のようなオブジェクトとCDNの輸入を包むsystemjsになど「_.cloneは関数ではありません」などのエラーを得続けるグローバルな依存関係の輸入でありますインポートはimport _ from 'lodash'
になりますが、lodash(角度のような他のグローバルスクリプトも)がデフォルト値をエクスポートせず、コード補完を失うため、IDEエラーが発生します。
ここでsystemjs/builderの要件を満たす正しい方法はありますか?
サイドノートとして、それがうまくいくなら、systemjs CDNの代わりにスクリプトタグの読み込みを使っても問題ありません。
今後の視聴者には、Aluanの答えとTypeScriptsコンパイルモジュールフォーマットを "システム"、 "モジュール"、 "システム"、 "システム"に設定することができました。グローバルでsyntheticDefaultImportsだけを切り替えた場合は正しいが、 'default'キーは定義されていなかった。 –
@RyanQそうすべきではないはずです。あなたがSystemJSのパッケージ設定が欠けていたと思います。 '' module ''を使う: "system" 'は良い選択肢です。お勧めですが、必須ではありません。 '--allowSyntheticDefaultImports'は型チェックにのみ影響することを思い出してください。 SystemJSが自動的にデフォルトを提供していない場合、設定が不足している可能性はほとんどありますが、あなたが現在持っているものを見ることなく何を見ているのかを言うのは難しいです。 –
設定部分に問題はありません。私は解決策を見つけることになるとここに戻ってきますが、現在のところ、dev/productionの両方で動作する良い設定をまだ見つけていません。 allowSyntheticDefaultImportsは少なくともIDE側で役立ちました。 –