2016-08-25 8 views
1

こんにちは私は現在WebpackでOpenLayers v3を使用しています。 UglifyJSを使用していないときはうまく動作します。しかし、私は私のuglifyJSの設定を追加した瞬間は、それだけでOpenLayers v3 with Webpack

 new webpack.optimize.UglifyJsPlugin({ 
     minimize: true, 
     sourceMap: false, 
     compress: { 
      warnings: false, 
      sequences: true, 
      dead_code: true, 
      conditionals: true, 
      booleans: true, 
      unused: true, 
      if_return: true, 
      join_vars: true, 
      drop_console: true 
     } 
    }), 

をconfigコンもう

マイUglifyJSをコンパイルしないであろうと私はdist/ol.jsファイルを使用しています

from UglifyJs RangeError: Maximum call stack size exceeded 

このエラーが発生します。

これを解決する方法はありますか?

+0

これはあなたの[自分の質問](http://stackoverflow.com/q/39078429/4640499)の複製ではありませんか? –

+0

別の問題@JonatasWalker:/ – highFlyingDodo

答えて

1

これは私が私のWebPACKプロジェクトにOL3ロードする方法です:

webpack.config.js:

... 

resolve: { 
    alias: { 
    openlayers3: "openlayers/dist/ol.js", 
    }, 
}, 

plugins: [ 
    new webpack.ProvidePlugin({ 
    ol: "openlayers3", 
    }), 
] 

... 

ProvidePluginロードモジュール、アプリでそれらをグローバルに利用できるようにします。 jsファイルにol3をインポートする必要はありません。

https://webpack.github.io/docs/list-of-plugins.html#provideplugin

+0

しかし、メイン出力ファイルにol3ライブラリを追加するか、必要に応じて追加します(ページにol3が必要な場合)? – highFlyingDodo

+0

はい、このようにol3はメインファイル – TeChn4K

1

は、ここで同じ問題を持っていました。 CommonsChunkPluginを使用してOpenlayersを独自のチャンクに移動し、そのチャンクをUglifyJsPluginで無視することで解決しました。

エントリ:

entry: { 
    vendor: Object.keys(packageDotJson.dependencies), 
    openlayers: ['openlayers'], 
    app: './src/index.jsx' 
} 

CommonsChunkPlugin:

new webpack.optimize.CommonsChunkPlugin({ 
    names: ["openlayers", "vendor"], 
    minChunks: Infinity, 
    filename: "[name].[hash].js" 
}), 

UglifyJsPlugin:

new webpack.optimize.UglifyJsPlugin({ 
    compress: { 
     warnings: false 
    }, 
    exclude: 'openlayers' 
}), 

は次にHtmlWebpackPluginを使用してHTMLテンプレートに含ま210

+0

にバンドルされますopenLayersは必要なときにのみロードされますか? – highFlyingDodo

+0

いいえ、実際はありません。これを実現するには、複数のエントリポイントを設定するか、それぞれに別々のhtmlファイルを生成するか、require.ensureを使用するか、webpack2でSystem.importを使用する必要があります –