JiTとAoTの両方を実行できるようにコードベースを設定しようとしています。私はangular documentation hereに従っており、両方とも個別に作業することに成功しました。角2 - JITとAoTの両方の外部ライブラリをインポート
私が直面している問題は、外部ライブラリ、特にモーメントjをインポートしようとするときです。 JITについては
私はSystemJS、
// systemjs.config.js
System.config({
map: {
// ...
moment: '/node_modules/moment',
},
packages: {
// ...
moment: {
defaultExtension: 'js'
}
}
});
されたコンフィギュレーションを使用しています。そしてtypescriptです内のコンポーネントにインポートするために、私はちょうど
// some-component.component.ts
import * as moment from 'moment/moment';
を行うことができますこれは正常に動作します地方開発のため。
ただし、AoTをロールアップでコンパイルしようとすると、Cannot call a namespace ('moment')
コンパイルエラーが発生します。ロールアップの設定にカップルの変更後に、コンポーネント内のimport文は、IBMアカデミーとロールアップのための素晴らしい作品
// some-component.component.ts
import moment from 'moment';
する必要がありますので、私は、this thread here次のようにその問題を解決しましたが、今SystemJSはそれを理解する問題があります。
私はループから脱出することはできません。私は仕事をすることができますが、同時に両方をすることはできません。ロールアップで必要なインポートステートメントをSystemJSに理解させる方法はありますか?私はその可能性があるとは思わない。
EDIT:
私は、少なくともそれを動作させるための方法を見つけたが、それはまさに理想的ではありません。インポートする代わりに、私はそれをany
と宣言してから、スクリプトタグを使って外部的にライブラリにロードします。だから今コンポーネントは、これは私がIBMアカデミービルドで瞬間をバンドルすることはできませんので、これは理想的ではない、
// some-component.component.ts
declare const moment: any;
私が言ったようで、それはまたany
として「一瞬VARを解釈するtypescriptですが強制的に今ではそのタイプについてはわかりません。だから、これはまだ私の質問に正確に答えていませんが、これは少なくとも動作します。
私はあなたが言及したスレッドのOPです。あなたはそれを行うためのより良い方法を見つけることができましたか?私はなぜ誰もこれについて話をしていないように思っています。それはかなり深刻な制限です... –
残念なことに、その特定のプロジェクトに対する私の唯一の依存は瞬間だったので、私はそれを行う他の方法を見つけることができなかったので、私のハックなソリューションで暮らすことに決めました。私は環境変数を使ってどのimport文が使われているかを制御するなどの他のオプションを考えましたが、決してそれを試しました。私はwebpackが輸入品のようにAoTを処理できるかどうかも疑問に思ったが、やはり試したことはなかった。 – davidmk