Skip to content

Commit 207014b

Browse files
committed
fix(bundler-webpack): sync types of webpack-dev-server 4 (close #208)
1 parent b74a98f commit 207014b

File tree

4 files changed

+63
-52
lines changed

4 files changed

+63
-52
lines changed

packages/@vuepress/bundler-webpack/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"@vuepress/shared": "2.0.0-beta.18",
3838
"@vuepress/utils": "2.0.0-beta.18",
3939
"autoprefixer": "^10.2.6",
40+
"chokidar": "^3.5.1",
4041
"copy-webpack-plugin": "^9.0.0",
4142
"css-loader": "^5.2.6",
4243
"esbuild-loader": "~2.13.1",
Lines changed: 41 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,53 @@
11
import { sep } from 'path'
22
import type { WebpackOptionsNormalized } from 'webpack'
3-
import * as WebpackDevServer from 'webpack-dev-server'
43
import { App } from '@vuepress/core'
54
import { path } from '@vuepress/utils'
65
import type { WebpackBundlerOptions } from '../types'
6+
import type { WebpackDevServer } from '../types.webpack-dev-server'
77
import { trailingSlashMiddleware } from './trailingSlashMiddleware'
88

99
export const createDevServerConfig = (
1010
app: App,
1111
options: WebpackBundlerOptions
12-
): WebpackDevServer.Configuration => {
13-
// TODO: add types for webpack-dev-server 4
14-
const serverConfig: WebpackOptionsNormalized['devServer'] = {
15-
compress: true,
16-
devMiddleware: {
17-
publicPath: app.options.base,
18-
writeToDisk: false,
19-
stats: app.env.isDebug ? 'normal' : 'errors-warnings',
20-
},
21-
firewall: false,
22-
headers: {
23-
'access-control-allow-origin': '*',
24-
},
25-
historyApiFallback: {
26-
disableDotRule: true,
27-
rewrites: [{ from: /./, to: path.join(app.options.base, 'index.html') }],
28-
},
29-
host: app.options.host,
30-
hot: true,
31-
onAfterSetupMiddleware: (expressApp, server) => {
32-
// plugin hook: afterDevServer
33-
options.afterDevServer?.(expressApp, server)
34-
},
35-
onBeforeSetupMiddleware: (expressApp, server) => {
36-
// use trailing slash middleware to support vuepress routing in dev-server
37-
// it will be handled by most of the deployment platforms
38-
expressApp.use(trailingSlashMiddleware)
12+
): WebpackOptionsNormalized['devServer'] => ({
13+
compress: true,
14+
devMiddleware: {
15+
publicPath: app.options.base,
16+
writeToDisk: false,
17+
stats: app.env.isDebug ? 'normal' : 'errors-warnings',
18+
},
19+
firewall: false,
20+
headers: {
21+
'access-control-allow-origin': '*',
22+
},
23+
historyApiFallback: {
24+
disableDotRule: true,
25+
rewrites: [{ from: /./, to: path.join(app.options.base, 'index.html') }],
26+
},
27+
host: app.options.host,
28+
hot: true,
29+
onAfterSetupMiddleware: (server: WebpackDevServer) => {
30+
options.afterDevServer?.(server)
31+
},
32+
onBeforeSetupMiddleware: (server: WebpackDevServer) => {
33+
// use trailing slash middleware to support vuepress routing in dev-server
34+
// it will be handled by most of the deployment platforms
35+
server.use(trailingSlashMiddleware)
3936

40-
// plugin hook: beforeDevServer
41-
options.beforeDevServer?.(expressApp, server)
42-
},
43-
open: app.options.open,
44-
port: app.options.port,
45-
static: {
46-
// `static.directory` will fail on Windows if we do not replace / with \
47-
directory: app.dir.public().replace('/', sep),
48-
publicPath: app.options.base,
49-
watch: {
50-
ignoreInitial: true,
51-
ignored: [
52-
// Do not watch node_modules
53-
'node_modules',
54-
],
55-
},
37+
options.beforeDevServer?.(server)
38+
},
39+
open: app.options.open,
40+
port: app.options.port,
41+
static: {
42+
// `static.directory` will fail on Windows if we do not replace / with \
43+
directory: app.dir.public().replace('/', sep),
44+
publicPath: app.options.base,
45+
watch: {
46+
ignoreInitial: true,
47+
ignored: [
48+
// Do not watch node_modules
49+
'node_modules',
50+
],
5651
},
57-
}
58-
59-
return serverConfig
60-
}
52+
},
53+
})

packages/@vuepress/bundler-webpack/src/types.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import type { Application } from 'express'
21
import type { Configuration as WebpackConfiguration } from 'webpack'
32
import type * as WebpackChainConfig from 'webpack-chain'
4-
import type * as WebpackDevServer from 'webpack-dev-server'
53
import type { LoaderContext } from './types.webpack'
4+
import type { WebpackDevServer } from './types.webpack-dev-server'
65

76
export type { WebpackConfiguration, WebpackChainConfig, WebpackDevServer }
87

@@ -31,12 +30,12 @@ export interface WebpackBundlerOptions {
3130
/**
3231
* hook that to be called in `devServer.before`
3332
*/
34-
beforeDevServer?: (expressApp: Application, server: WebpackDevServer) => void
33+
beforeDevServer?: (server: WebpackDevServer) => void
3534

3635
/**
3736
* hook that to be called in `devServer.after`
3837
*/
39-
afterDevServer?: (expressApp: Application, server: WebpackDevServer) => void
38+
afterDevServer?: (server: WebpackDevServer) => void
4039

4140
/**
4241
* postcss-loader options
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import type { FSWatcher } from 'chokidar'
2+
import type { Application } from 'express'
3+
import type { Compiler, WebpackOptionsNormalized } from 'webpack'
4+
5+
export interface WebpackDevServer {
6+
app: Application
7+
compiler: Compiler
8+
// WebpackLogger
9+
logger: ReturnType<Compiler['getInfrastructureLogger']>
10+
// DevServer
11+
options: WebpackOptionsNormalized['devServer']
12+
sockets: any[]
13+
staticWatchers: FSWatcher[]
14+
webSocketProxies: any[]
15+
webSocketHeartbeatInterval: number
16+
17+
use: Application['use']
18+
}

0 commit comments

Comments
 (0)