Skip to content

Commit 683ed7a

Browse files
liangchunnjohnnyreilly
authored andcommitted
[WIP] webpack@5 hooks support (#166)
* feat(webpack5): add support for webpack 5 alpha * chore(package): remove support for node6, align engine version with webpack5 * refactor(hooks): rename and refactor hooks + legacy hooks, improve typings * prepare for alpha release * fix(index): move getCompilerHooks public static method
1 parent fe2a35d commit 683ed7a

File tree

8 files changed

+298
-787
lines changed

8 files changed

+298
-787
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ language: node_js
22
node_js:
33
- '10'
44
- '8'
5-
- '6'
65
install:
76
- yarn install
87
- yarn build
98
- yarn add $WEBPACK $TSLOADER $VUELOADER -D
109
- yarn lint
1110
env:
11+
- WEBPACK=webpack@^5.0.0-alpha.0 TSLOADER=ts-loader@^5.0.0 VUELOADER=vue-loader@^15.2.4
1212
- WEBPACK=webpack@^4.0.0 TSLOADER=ts-loader@^5.0.0 VUELOADER=vue-loader@^15.2.4
1313
- WEBPACK=webpack@^3.10.0 TSLOADER=ts-loader@^3.4.0 VUELOADER=vue-loader@^13.5.0
1414
- WEBPACK=webpack@^2.7.0 TSLOADER=ts-loader@^3.4.0 VUELOADER=vue-loader@^13.5.0
@@ -21,3 +21,4 @@ deploy:
2121
on:
2222
tags: true
2323
branch: master
24+
tag: next

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
## v1.0.0-alpha.0
2+
3+
* [Add support for webpack 5](https://github.com/Realytics/fork-ts-checker-webpack-plugin/pull/166)
4+
5+
### Breaking Changes
6+
7+
Version `1.x` additionally supports webpack 5 alongside webpack 4, whose hooks are now tapped differently:
8+
9+
```diff
10+
- compiler.hooks.forkTsCheckerDone.tap(...args)
11+
+ const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks(compiler)
12+
+ forkTsCheckerHooks.done.tap(...args)
13+
```
14+
15+
v1.0.0-alpha.0 drops support for node 6.
16+
117
## v0.5.2
218

319
* [Fix erroneous error on diagnostics at 0 line; remove deprecated fs.existsSync](https://github.com/Realytics/fork-ts-checker-webpack-plugin/pull/190) (#190)

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "fork-ts-checker-webpack-plugin",
3-
"version": "0.5.2",
3+
"version": "1.0.0-alpha.0",
44
"description": "Runs typescript type checker and linter on separate process.",
55
"main": "lib/index.js",
66
"types": "lib/index.d.ts",
@@ -37,7 +37,7 @@
3737
"webpack-plugin"
3838
],
3939
"engines": {
40-
"node": ">=6.11.5"
40+
"node": ">=8.9.0"
4141
},
4242
"author": "Piotr Oleś <[email protected]>",
4343
"contributors": [
@@ -75,7 +75,7 @@
7575
"vue-class-component": "^6.1.1",
7676
"vue-loader": "^15.2.4",
7777
"vue-template-compiler": "^2.5.16",
78-
"webpack": "^4.16.5"
78+
"webpack": "^5.0.0-alpha.0"
7979
},
8080
"peerDependencies": {
8181
"tslint": "^4.0.0 || ^5.0.0",

src/hooks.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import * as webpack from 'webpack';
2+
import { AsyncSeriesHook, SyncHook } from 'tapable';
3+
4+
type ForkTsCheckerHooks =
5+
| 'serviceBeforeStart'
6+
| 'cancel'
7+
| 'serviceStartError'
8+
| 'waiting'
9+
| 'serviceStart'
10+
| 'receive'
11+
| 'serviceOutOfMemory'
12+
| 'emit'
13+
| 'done';
14+
type ForkTsCheckerHookMap = Record<
15+
ForkTsCheckerHooks,
16+
SyncHook | AsyncSeriesHook
17+
>;
18+
type ForkTsCheckerLegacyHookMap = Record<ForkTsCheckerHooks, string>;
19+
20+
const compilerHookMap = new WeakMap<webpack.Compiler, ForkTsCheckerHookMap>();
21+
22+
export const legacyHookMap: ForkTsCheckerLegacyHookMap = {
23+
serviceBeforeStart: 'fork-ts-checker-service-before-start',
24+
cancel: 'fork-ts-checker-cancel',
25+
serviceStartError: 'fork-ts-checker-service-start-error',
26+
waiting: 'fork-ts-checker-waiting',
27+
serviceStart: 'fork-ts-checker-service-start',
28+
receive: 'fork-ts-checker-receive',
29+
serviceOutOfMemory: 'fork-ts-checker-service-out-of-memory',
30+
emit: 'fork-ts-checker-emit',
31+
done: 'fork-ts-checker-done'
32+
};
33+
34+
function createForkTsCheckerWebpackPluginHooks(): ForkTsCheckerHookMap {
35+
return {
36+
serviceBeforeStart: new AsyncSeriesHook([]),
37+
cancel: new SyncHook(['cancellationToken']),
38+
serviceStartError: new SyncHook(['error']),
39+
waiting: new SyncHook(['hasTsLint']),
40+
serviceStart: new SyncHook([
41+
'tsconfigPath',
42+
'tslintPath',
43+
'watchPaths',
44+
'workersNumber',
45+
'memoryLimit'
46+
]),
47+
receive: new SyncHook(['diagnostics', 'lints']),
48+
serviceOutOfMemory: new SyncHook([]),
49+
emit: new SyncHook(['diagnostics', 'lints', 'elapsed']),
50+
done: new SyncHook(['diagnostics', 'lints', 'elapsed'])
51+
};
52+
}
53+
54+
export function getForkTsCheckerWebpackPluginHooks(compiler: webpack.Compiler) {
55+
let hooks = compilerHookMap.get(compiler);
56+
if (hooks === undefined) {
57+
hooks = createForkTsCheckerWebpackPluginHooks();
58+
compilerHookMap.set(compiler, hooks);
59+
}
60+
return hooks;
61+
}

0 commit comments

Comments
 (0)