var webpack = require('webpack'), _ = require('underscore'), path = require('path'), baseConfig = {}, config = []; baseConfig = { context: __dirname, watch: { aggregateTimeout: 300, poll: true }, output: { path: './assets/js', filename: '[name].js', }, resolve: { modulesDirectories: [ 'node_modules', 'assets/js/src', ], alias: { 'handlebars': 'handlebars/dist/handlebars.js', 'backbone.marionette': 'backbone.marionette/lib/backbone.marionette', 'backbone.supermodel$': 'backbone.supermodel/build/backbone.supermodel.js', 'sticky-kit': 'vendor/jquery.sticky-kit.js', 'interact$': 'interact.js/interact.js', 'spectrum$': 'spectrum-colorpicker/spectrum.js', 'blob$': 'blob/Blob.js', 'filesaver$': 'filesaver/FileSaver.js', 'papaparse': 'papaparse/papaparse.min.js', 'helpscout': 'helpscout.js', 'html2canvas': 'html2canvas/dist/html2canvas.js', 'asyncqueue': 'vendor/jquery.asyncqueue.js' }, }, node: { fs: 'empty' }, module: { loaders: [ { test: /\.jsx$/, loader: 'babel-loader' }, { test: /form_editor\.js$/, loader: 'expose-loader?WysijaForm', }, { include: require.resolve('codemirror'), loader: 'expose-loader?CodeMirror', }, { include: require.resolve('backbone'), loader: 'expose-loader?Backbone', }, { include: require.resolve('underscore'), loader: 'expose-loader?_', }, { include: /Blob.js$/, loader: 'exports-loader?window.Blob', }, { test: /backbone.supermodel/, loader: 'exports-loader?Backbone.SuperModel', }, { include: require.resolve('handlebars'), loader: 'expose-loader?Handlebars', }, { include: /helpscout.js$/, loader: 'exports-loader?window.HS', }, { include: /html2canvas.js$/, loader: 'expose-loader?html2canvas', }, { include: require.resolve('velocity-animate'), loader: 'imports-loader?jQuery=jquery', }, ] } }; // Admin config.push(_.extend({}, baseConfig, { name: 'admin', entry: { vendor: [ 'handlebars', 'handlebars_helpers' ], mailpoet: [ 'mailpoet', 'ajax', 'date', 'i18n', 'modal', 'notice', 'jquery.serialize_object', 'parsleyjs' ], admin: [ 'subscribers/subscribers.jsx', 'newsletters/newsletters.jsx', 'segments/segments.jsx', 'forms/forms.jsx', 'settings/tabs.js', 'subscribers/importExport/import.js', 'subscribers/importExport/export.js', 'helpscout', 'cron.jsx' ], form_editor: [ 'form_editor/form_editor.js', 'codemirror', 'codemirror/mode/css/css' ], newsletter_editor: [ 'underscore', 'backbone', 'backbone.marionette', 'backbone.supermodel', 'interact.js', 'backbone.radio', 'select2', 'spectrum', 'sticky-kit', 'blob', 'filesaver', 'velocity-animate', 'newsletter_editor/communicationsFix.js', 'newsletter_editor/App', 'newsletter_editor/components/config.js', 'newsletter_editor/components/styles.js', 'newsletter_editor/components/sidebar.js', 'newsletter_editor/components/content.js', 'newsletter_editor/components/heading.js', 'newsletter_editor/components/save.js', 'newsletter_editor/components/communication.js', 'newsletter_editor/behaviors/BehaviorsLookup.js', 'newsletter_editor/behaviors/ColorPickerBehavior.js', 'newsletter_editor/behaviors/ContainerDropZoneBehavior.js', 'newsletter_editor/behaviors/DraggableBehavior.js', 'newsletter_editor/behaviors/HighlightEditingBehavior.js', 'newsletter_editor/behaviors/ResizableBehavior.js', 'newsletter_editor/behaviors/SortableBehavior.js', 'newsletter_editor/behaviors/ShowSettingsBehavior.js', 'newsletter_editor/blocks/base.js', 'newsletter_editor/blocks/container.js', 'newsletter_editor/blocks/button.js', 'newsletter_editor/blocks/image.js', 'newsletter_editor/blocks/divider.js', 'newsletter_editor/blocks/text.js', 'newsletter_editor/blocks/spacer.js', 'newsletter_editor/blocks/footer.js', 'newsletter_editor/blocks/header.js', 'newsletter_editor/blocks/automatedLatestContent.js', 'newsletter_editor/blocks/posts.js', 'newsletter_editor/blocks/social.js' ] }, plugins: [ new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js') ], externals: { 'jquery': 'jQuery', 'tinymce': 'tinymce' } })); // Public config.push(_.extend({}, baseConfig, { name: 'public', entry: { public: [ 'mailpoet', 'ajax', 'iframe', 'jquery.serialize_object', 'public.js' ] }, externals: { 'jquery': 'jQuery' } })); // Test config.push(_.extend({}, baseConfig, { name: 'test', entry: { vendor: ['handlebars', 'handlebars_helpers'], testNewsletterEditor: [ 'underscore', 'backbone', 'backbone.marionette', 'backbone.supermodel', 'backbone.radio', 'select2', 'blob', 'filesaver', 'velocity-animate', 'mailpoet', 'notice', 'i18n', 'newsletter_editor/communicationsFix.js', 'newsletter_editor/App', 'newsletter_editor/components/config.js', 'newsletter_editor/components/styles.js', 'newsletter_editor/components/sidebar.js', 'newsletter_editor/components/content.js', 'newsletter_editor/components/heading.js', 'newsletter_editor/components/save.js', 'newsletter_editor/components/communication.js', 'newsletter_editor/behaviors/BehaviorsLookup.js', 'newsletter_editor/behaviors/ColorPickerBehavior.js', 'newsletter_editor/behaviors/ContainerDropZoneBehavior.js', 'newsletter_editor/behaviors/DraggableBehavior.js', 'newsletter_editor/behaviors/HighlightEditingBehavior.js', 'newsletter_editor/behaviors/ResizableBehavior.js', 'newsletter_editor/behaviors/SortableBehavior.js', 'newsletter_editor/behaviors/ShowSettingsBehavior.js', 'newsletter_editor/blocks/base.js', 'newsletter_editor/blocks/container.js', 'newsletter_editor/blocks/button.js', 'newsletter_editor/blocks/image.js', 'newsletter_editor/blocks/divider.js', 'newsletter_editor/blocks/text.js', 'newsletter_editor/blocks/spacer.js', 'newsletter_editor/blocks/footer.js', 'newsletter_editor/blocks/header.js', 'newsletter_editor/blocks/automatedLatestContent.js', 'newsletter_editor/blocks/posts.js', 'newsletter_editor/blocks/social.js', 'components/config.spec.js', 'components/content.spec.js', 'components/heading.spec.js', 'components/save.spec.js', 'components/sidebar.spec.js', 'components/styles.spec.js', 'components/communication.spec.js', 'blocks/automatedLatestContent.spec.js', 'blocks/button.spec.js', 'blocks/container.spec.js', 'blocks/divider.spec.js', 'blocks/footer.spec.js', 'blocks/header.spec.js', 'blocks/image.spec.js', 'blocks/posts.spec.js', 'blocks/social.spec.js', 'blocks/spacer.spec.js', 'blocks/text.spec.js', ], }, output: { path: './tests/javascript/testBundles', filename: '[name].js', }, resolve: { modulesDirectories: [ 'node_modules', 'assets/js/src', 'tests/javascript/newsletter_editor' ], alias: { 'sticky-kit': 'vendor/jquery.sticky-kit.js', 'backbone.marionette': 'backbone.marionette/lib/backbone.marionette', 'backbone.supermodel$': 'backbone.supermodel/build/backbone.supermodel.js', 'blob$': 'blob/Blob.js', 'filesaver$': 'filesaver/FileSaver.js' }, }, externals: { 'jquery': 'jQuery', 'tinymce': 'tinymce', 'interact': 'interact', 'spectrum': 'spectrum', } })); module.exports = config;