1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _fs = require('fs');
|
8 |
|
9 | var _fs2 = _interopRequireDefault(_fs);
|
10 |
|
11 | var _path = require('path');
|
12 |
|
13 | var _path2 = _interopRequireDefault(_path);
|
14 |
|
15 | var _includes = require('lodash/includes');
|
16 |
|
17 | var _includes2 = _interopRequireDefault(_includes);
|
18 |
|
19 | var _extraEntryWebpackPlugin = require('extra-entry-webpack-plugin');
|
20 |
|
21 | var _extraEntryWebpackPlugin2 = _interopRequireDefault(_extraEntryWebpackPlugin);
|
22 |
|
23 | var _readMultipleFiles = require('read-multiple-files');
|
24 |
|
25 | var _readMultipleFiles2 = _interopRequireDefault(_readMultipleFiles);
|
26 |
|
27 | var _emitAssets = require('./utils/emitAssets');
|
28 |
|
29 | var _emitAssets2 = _interopRequireDefault(_emitAssets);
|
30 |
|
31 | var _registerPlugins = require('./registerPlugins');
|
32 |
|
33 | var _registerPlugins2 = _interopRequireDefault(_registerPlugins);
|
34 |
|
35 | var _registerDefaultPlugins = require('./registerDefaultPlugins');
|
36 |
|
37 | var _registerDefaultPlugins2 = _interopRequireDefault(_registerDefaultPlugins);
|
38 |
|
39 | var _createHTML = require('./utils/createHTML');
|
40 |
|
41 | var _createHTML2 = _interopRequireDefault(_createHTML);
|
42 |
|
43 | var _getCommonsChunkFilename = require('./utils/getCommonsChunkFilename');
|
44 |
|
45 | var _getCommonsChunkFilename2 = _interopRequireDefault(_getCommonsChunkFilename);
|
46 |
|
47 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | function apply(compiler) {
|
57 | var _this = this;
|
58 |
|
59 | var dest = this.options.dest;
|
60 | var filter = this.options.filter;
|
61 |
|
62 |
|
63 | if (this.options.plugins && this.options.plugins.length > 0) {
|
64 | (0, _registerPlugins2.default)(compiler, this.options.plugins);
|
65 | } else {
|
66 | (0, _registerDefaultPlugins2.default)(compiler);
|
67 | }
|
68 |
|
69 |
|
70 | var userBundleFileName = _path2.default.join(dest, 'user-bundle.js');
|
71 | var userEntries = compiler.options.entry;
|
72 | var devServerOptions = compiler.options.devServer;
|
73 | var commonsChunkFilename = (0, _getCommonsChunkFilename2.default)(compiler.options.plugins);
|
74 |
|
75 |
|
76 | var extraEntries = ['!!' + require.resolve('./dynamic-resolve.js') + '?' + JSON.stringify({
|
77 | filter: filter.toString(),
|
78 | componentRoot: this.options.componentRoot,
|
79 | context: compiler.context,
|
80 | dest: this.options.dest,
|
81 | commonsChunkFilename: commonsChunkFilename
|
82 | }) + '!' + require.resolve('./assets/placeholder.js')];
|
83 |
|
84 |
|
85 | var devServerWithHMR = (0, _includes2.default)(userEntries, 'webpack-dev-server/client') && devServerOptions && devServerOptions.hot;
|
86 | var middlwareWithHMR = (0, _includes2.default)(userEntries, 'webpack-hot-middleware/client');
|
87 |
|
88 | if (this.options.hot !== false && (this.options.hot === true || devServerWithHMR)) {
|
89 | if ((0, _includes2.default)(userEntries, 'webpack/hot/only-dev-server')) {
|
90 | extraEntries.unshift('webpack/hot/only-dev-server');
|
91 | }
|
92 | extraEntries.unshift('webpack-dev-server/client?http://' + devServerOptions.host + ':' + devServerOptions.port);
|
93 | } else if (this.options.hot !== false && (this.options.hot === true || middlwareWithHMR)) {
|
94 | if ((0, _includes2.default)(userEntries, 'webpack/hot/only-dev-server')) {
|
95 | extraEntries.unshift('webpack/hot/only-dev-server');
|
96 | }
|
97 | extraEntries.unshift('webpack-hot-middleware/client');
|
98 | }
|
99 |
|
100 |
|
101 | compiler.apply(new _extraEntryWebpackPlugin2.default({
|
102 | entry: extraEntries,
|
103 | entryName: 'CarteBlanche [' + this.id + ']',
|
104 | outputName: userBundleFileName
|
105 | }));
|
106 |
|
107 |
|
108 |
|
109 | var clientAssets = {
|
110 | 'index.html': (0, _createHTML2.default)({ dest: dest, commonsChunkFilename: commonsChunkFilename }),
|
111 | 'client-bundle.js': _fs2.default.readFileSync(_path2.default.resolve(__dirname, './assets/client-bundle.js')),
|
112 | 'client-bundle.css': _fs2.default.readFileSync(_path2.default.resolve(__dirname, './assets/client.css')),
|
113 | 'iframe-client-bundle.js': _fs2.default.readFileSync(_path2.default.resolve(__dirname, './assets/iframe-client-bundle.js'))
|
114 | };
|
115 |
|
116 | compiler.plugin('emit', function (compilation, callback) {
|
117 |
|
118 | var assets = _this.options.files || [];
|
119 |
|
120 | compilation.applyPlugins('carte-blanche-plugin-assets-processing', assets);
|
121 |
|
122 | if (assets.length > 0) {
|
123 | (0, _readMultipleFiles2.default)(assets, function (err, contents) {
|
124 | if (err) {
|
125 | throw err;
|
126 | }
|
127 | var scripts = [];
|
128 | var styles = [];
|
129 |
|
130 |
|
131 | assets.forEach(function (assetFilename, index) {
|
132 | switch (assetFilename.substr(-3)) {
|
133 | case '.js':
|
134 | scripts.push(contents[index]);break;
|
135 | case 'css':
|
136 | styles.push(contents[index]);break;
|
137 | default:
|
138 | break;
|
139 | }
|
140 | });
|
141 |
|
142 | clientAssets['index.html'] = (0, _createHTML2.default)({
|
143 | dest: dest,
|
144 | extraScripts: scripts,
|
145 | extraStyles: styles
|
146 | });
|
147 | (0, _emitAssets2.default)(compilation, clientAssets, dest, callback);
|
148 | });
|
149 | } else {
|
150 |
|
151 |
|
152 | (0, _emitAssets2.default)(compilation, clientAssets, dest, callback);
|
153 | }
|
154 | });
|
155 |
|
156 |
|
157 | compiler.plugin('compilation', function (compilation) {
|
158 | return compilation.plugin('html-webpack-plugin-alter-chunks', function (chunks) {
|
159 | return chunks.filter(function (chunk) {
|
160 | return chunk.files.indexOf(userBundleFileName) === -1;
|
161 | });
|
162 | });
|
163 | });
|
164 |
|
165 |
|
166 | if (devServerOptions && devServerOptions.host && devServerOptions.port) {
|
167 |
|
168 | console.log('CarteBlanche started at http://' + devServerOptions.host + ':' + devServerOptions.port + '/' + dest + '!');
|
169 | } else {
|
170 |
|
171 | console.log('CarteBlanche started at /' + dest);
|
172 | }
|
173 | }
|
174 |
|
175 | exports.default = apply; |
\ | No newline at end of file |