2016-08-25 2 views
1

Здравствуйте, я использую OpenLayers v3 с помощью Webpack. Он отлично работает, когда я не использую UglifyJS. Но в тот момент я добавил свой uglifyJS конфигурацию, он просто не будет компилировать большеOpenLayers v3 с Webpack

Моего UglifyJS конфига

 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 
     } 
    }), 

И я получаю эту ошибку

from UglifyJs RangeError: Maximum call stack size exceeded 

Я использую файл dist/ol.js.

Любая идея, как решить эту проблему?

+0

Разве это не дубликат вашего [собственного вопроса] (http://stackoverflow.com/q/39078429/4640499)? –

+0

Другая проблема @JonatasWalker:/ – highFlyingDodo

ответ

1

Это, как я загружаю Ol3 в моем WebPack проекте:

webpack.config.js:

... 

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

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

... 

модули ProvidePlugin нагрузки и сделать их по всему миру доступны в приложении. Вам больше не нужно импортировать ol3 в ваши js-файлы.

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

+0

Но добавляет ли она ol3-библиотеку в ваш основной выходной файл или добавляет ее по требованию (когда страница нужна ol3)? – highFlyingDodo

+0

Да, таким образом ol3 будет в комплекте в ваш основной файл – TeChn4K

1

Если бы тот же вопрос здесь. Решено путем перемещения openlayers в свой кусок, используя CommonsChunkPlugin, затем игнорируя этот фрагмент в 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' 
}), 

Затем включены в шаблон HTML с использованием HtmlWebpackPlugin:

<% for (var chunk in htmlWebpackPlugin.files.chunks) { %> 
<script src="<%=htmlWebpackPlugin.files.chunks[chunk].entry %>"></script> 
<% } %> 
+0

openLayers загружается только тогда, когда это необходимо? – highFlyingDodo

+0

Нет, не совсем. Чтобы получить это, вам нужно либо настроить несколько точек входа, создав отдельный файл html для каждого, либо использовать require.ensure, либо использовать System.import в webpack2 –

Смежные вопросы