Extract React libraries to a separate chunk and expose them globally [PREMIUM-2]

This commit is contained in:
Alexey Stoletniy
2017-03-01 14:30:24 +03:00
parent 136a531047
commit 37a6a74b6e
2 changed files with 22 additions and 2 deletions

View File

@@ -51,6 +51,10 @@ jQuery('.toplevel_page_mailpoet-newsletters.menu-top-last')
<% block translations %><% endblock %> <% block translations %><% endblock %>
<%= javascript(
'admin_vendor.js'
)%>
<% block before_admin_javascript %><% endblock %> <% block before_admin_javascript %><% endblock %>
<%= javascript( <%= javascript(

View File

@@ -2,7 +2,8 @@ var webpack = require('webpack'),
_ = require('underscore'), _ = require('underscore'),
path = require('path'), path = require('path'),
baseConfig = {}, baseConfig = {},
config = []; config = [],
globalPrefix = 'MailPoetLib';
baseConfig = { baseConfig = {
context: __dirname, context: __dirname,
@@ -60,9 +61,17 @@ baseConfig = {
include: require.resolve('underscore'), include: require.resolve('underscore'),
loader: 'expose-loader?_', loader: 'expose-loader?_',
}, },
{
include: require.resolve('react'),
loader: 'expose-loader?' + globalPrefix + '.React',
},
{
include: require.resolve('react-string-replace'),
loader: 'expose-loader?' + globalPrefix + '.ReactStringReplace',
},
{ {
test: /wp-js-hooks/i, test: /wp-js-hooks/i,
loader: 'exports-loader?window.wp.hooks', loader: 'expose-loader?' + globalPrefix + '.Hooks!exports-loader?wp.hooks',
}, },
{ {
include: /Blob.js$/, include: /Blob.js$/,
@@ -111,6 +120,12 @@ config.push(_.extend({}, baseConfig, {
'jquery.serialize_object', 'jquery.serialize_object',
'parsleyjs' 'parsleyjs'
], ],
admin_vendor: [
'react',
'react-dom',
'react-router',
'react-string-replace'
],
admin: [ admin: [
'subscribers/subscribers.jsx', 'subscribers/subscribers.jsx',
'newsletters/newsletters.jsx', 'newsletters/newsletters.jsx',
@@ -172,6 +187,7 @@ config.push(_.extend({}, baseConfig, {
] ]
}, },
plugins: [ plugins: [
new webpack.optimize.CommonsChunkPlugin('admin_vendor', 'admin_vendor.js', ['admin_vendor', 'admin']),
new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js') new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js')
], ],
externals: { externals: {