Skip to content

Commit eb51eb3

Browse files
committed
Add support for Webpack 4 (in addition to 3 & prior)
1 parent a24e504 commit eb51eb3

File tree

4 files changed

+26
-8
lines changed

4 files changed

+26
-8
lines changed

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"eslint": "^4.16.0",
2828
"eslint-config-developit": "^1.1.1",
2929
"microbundle": "^0.4.3",
30+
"webpack": "^4.14.0",
3031
"workerize-loader": "^1.0.1"
3132
},
3233
"dependencies": {
@@ -48,7 +49,9 @@
4849
"karma-webpack": "2.0.7",
4950
"puppeteer": "^1.0.0",
5051
"sade": "^1.3.1",
51-
"script-loader": "^0.7.2",
52-
"webpack": "^3.10.0"
52+
"script-loader": "^0.7.2"
53+
},
54+
"peerDependencies": {
55+
"webpack": ">=4"
5356
}
5457
}

src/configure.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import { moduleDir, tryRequire, dedupe, cleanStack, readFile, readDir } from './
55
import babelLoader from './lib/babel-loader';
66
import cssLoader from './lib/css-loader';
77

8+
const WEBPACK_VERSION = String(require('webpack').version || '3.0.0');
9+
const WEBPACK_MAJOR = WEBPACK_VERSION.split('.')[0]|0;
10+
811
export default function configure(options) {
912
let cwd = process.cwd(),
1013
res = file => path.resolve(cwd, file);
@@ -102,7 +105,7 @@ export default function configure(options) {
102105
return Object.assign({}, configured || {}, value);
103106
}
104107

105-
return {
108+
let generatedConfig = {
106109
basePath: cwd,
107110
plugins: PLUGINS.map(require.resolve),
108111
frameworks: ['jasmine'],
@@ -152,8 +155,10 @@ export default function configure(options) {
152155

153156
webpack: {
154157
devtool: 'cheap-module-eval-source-map',
158+
mode: webpackConfig.mode || 'development',
155159
module: {
156-
loaders: loaders.concat(
160+
// @TODO check webpack version and use loaders VS rules as the key here appropriately:
161+
rules: loaders.concat(
157162
!getLoader( rule => `${rule.use},${rule.loader}`.match(/\bbabel-loader\b/) ) && babelLoader(options),
158163
!getLoader('foo.css') && cssLoader(options)
159164
).filter(Boolean)
@@ -199,4 +204,13 @@ export default function configure(options) {
199204
}
200205
}
201206
};
207+
208+
if (WEBPACK_MAJOR < 4) {
209+
delete generatedConfig.webpack.mode;
210+
let { rules } = generatedConfig.webpack.module;
211+
delete generatedConfig.webpack.module.rules;
212+
generatedConfig.webpack.module.loaders = rules;
213+
}
214+
215+
return generatedConfig;
202216
}

test/fixture.worker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
export function foo() {
1+
export async function foo() {
22
return 1;
33
}

test/index.test.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import worker from 'workerize-loader!./fixture.worker.js';
2+
13
const sleep = ms => new Promise( r => setTimeout(r, ms) );
24

35
describe('demo', () => {
@@ -18,9 +20,8 @@ describe('demo', () => {
1820
});
1921

2022
it('should do MAGIC', async () => {
21-
let lib = await import('workerize-loader!./fixture.worker.js');
22-
expect(lib).toEqual(jasmine.any(Function));
23-
let mod = lib();
23+
let mod = worker();
24+
expect(mod.foo).toEqual(jasmine.any(Function));
2425
expect(await mod.foo()).toEqual(1);
2526
});
2627
});

0 commit comments

Comments
 (0)