2015-10-02 9 views
7

webpackとbabel-core 5.8.25を使ってアプリを書いています。Object.assignがSafari 8.0.7で動作しないように見えるのはなぜですか?

ある時点で、この処理が行われます。

someArray.map(item => { 
    const updatedItem = Object.assign({}, item); // silently fails here... doesn't even continue the code 

    updatedItem.prop = 'something cool'; 
}); 

これは明らかに、ブラウザを打つ前にコンパイルされます。 Chromeの最新バージョンとiOS Safariの最新バージョンで動作しますが、Safari 8.0.7では黙って失敗します(エラーはスローされません...その行を超えていません)。予想通り

これは、しかし、(lodashを使用して)動作します。

someArray.map(item => { 
    const updatedItem = _.extend({}, item); // the important part 

    updatedItem.prop = 'something cool'; 
}); 

任意のアイデア?私はこれに関してインターネットをぶち壊そうとしたが、役に立たなかった。

+0

バベルのポリフィルをロードしていますか? 'require( 'babel-core/polyfill');' – loganfsmyth

+0

@loganfsmyth、明示的ではありません。私はwebpackと組み合わせてbabel-loaderを使用しています(そして、私はbabel-loaderが単にbabel-coreを利用すると信じています)。これはブラウザ間の機能の違いを説明しますか? iOS 9のモバイルSafariとOSXデスクトップChromeでは、 'Object.assign'をコンパイルするとうまく動作します。 –

答えて

8

Object.assignは、Chromeがネイティブでサポートするため、Chromeで動作します。 babel-loaderは、ES6の構文をES5の構文に変換するだけで、ES6のライブラリ機能を利用できるようにすることはありません。 WebPACKのであることを行うための最も簡単な方法は、WebPACKのも、あなたのアプリケーションを実行する前に、ポリフィルをバンドルして実行されるように

entry: 'app.js' 

のようなものから

entry: ['babel-core/polyfill', 'app.js'] 

// Or with Babel 6: 
entry: ['babel-polyfill', 'app.js'] 

にあなたの設定を変更することです。 Babelはpolfillをロードする簡単な方法として/polyfillを提供していますが、誰もがそれを使用したいとは考えていないため、利用可能なポリフィルが多数あり、Babelが使用しているので、core-jsは多数あります。

関連する問題