2016-10-08 5 views
0

Angular 2typescript 2のコードはthe Intl.js polyfillです。Rollup.jsでIntl.jsモジュールを使用する方法

tsconfig.jsonに設定して、Rollup.jsをrecommended by Angularとして使用してツリーシェイクを可能にしました。私のコンポーネントで、私はちょうどimport 'intl'

私は、ブラウザでアプリケーションを実行しない場合、私はes2015

rollup.configにライブラリを変換するためにrollup-plugin-commonjsを使用してみましたが、エラー

global is not defined

を取得します.js

plugins: [ 
     nodeResolve({jsnext: true, module: true}), 
     commonjs({ 
      include: 'node_modules/intl/**/*', 
     }) 
] 

ブラウザでアプリを実行すると、行で

IntlPolyfill is not defined

IntlPolyfill.__addLocaleData({locale:"en-US",...});

I noticed hereそれはrollupと互換性がありますので、ライブラリはes6で書かれていることを示すエラートン。どのようにこのライブラリをes6モジュールとして使用するためのヒント?

答えて

2

ES6モジュールとしてIntl.jsを使用するには、distフォルダ(例えばIntl.esm.jsなど)内の他のファイルと一緒にESモジュールのバージョンを公開するメンテナを説得

  1. に必要があると思いますいずれか、package.jsonmodulejsnext:mainフィールドを使用して - 彼らはすでに自分のUMDが同じバベルを使用するように注意しながら、src内のファイルを使用して、それを自分でビルドするので、これは些細な追加となり構築、または
  2. 生成するプログラムのロールアップを使用しています設定等

あなたはになります。は、現在の形式でrollup-plugin-commonjsを使用して使います。

import 'intl/dist/Intl.js'; 
console.log(Intl); // works! 
:それはあなたがちょうどあなたが(おそらく彼らはESモジュールにどのように働くかにCommonJSで異なる動作をするいくつかのトリッキーな循環的な依存関係に) index.jsファイルではなく dist/Intl.jsファイルをインポートしていることを確認する必要があり判明します

index.jsは、distファイルがESモジュールから直接生成されるため(bloaty CommonJS変換なし)、効果があってもインポートするよりも良い結果が得られます。

+0

私は 'en-us'ロケールだけを使用しているので、' intl/index.js'を編集し、6行目を[this](https://github.com/andyearnshaw/Intl.js)に変更しました。 /blob/master/index.js#L6)から[th​​is](http://pastebin.com/GfYSL7t2)に変更してください。これにより、バンドルのサイズを大幅に縮小することができました。あなたが考えるこの利益を維持するためにあなたのソリューションを適応させることはできますか? – BeetleJuice

+0

'locale-data/complete.js'を' locale-data/jsonp/replace 'に置き換えるには、[rollup-plugin-replace](https://github.com/rollup/rollup-plugin-replace) es-US.js' –

関連する問題