From 35057757da15695a7a510eea1a6908e7477471c5 Mon Sep 17 00:00:00 2001 From: sunhao Date: Mon, 18 Mar 2019 17:31:24 +0800 Subject: [PATCH] feat: add server nodeExternalsWhitelist --- @types/index.d.ts | 7 ++- src/config/webpack.server.config.ts | 70 ++++++++++++++++------------- 2 files changed, 45 insertions(+), 32 deletions(-) diff --git a/@types/index.d.ts b/@types/index.d.ts index 5d8d1f9..32c9be0 100644 --- a/@types/index.d.ts +++ b/@types/index.d.ts @@ -347,7 +347,12 @@ declare namespace build { mode?: webpackMode base?: Configuration client?: Configuration - server?: Configuration + server?: serverConfig + } + + interface serverConfig extends Configuration { + nodeExternalsWhitelist: any[] + webpack: Configuration } /** diff --git a/src/config/webpack.server.config.ts b/src/config/webpack.server.config.ts index 0cf2277..4532180 100644 --- a/src/config/webpack.server.config.ts +++ b/src/config/webpack.server.config.ts @@ -13,37 +13,45 @@ export function getServerConfig(options: ConfigOptions.options) { consola.fatal( 'getBaseConfig options.babelrc or options.webpack is undefined' ) - return process.exit(0) + return process.exit(1) } - const server = options.webpack.server || {} - const mode = options.webpack.mode || 'production' - const isProd = mode === 'production' - return (merge as any)( - getBaseConfig(options), - { - name: 'server', - target: 'node', - entry: './src/entry-server.js', - output: { - libraryTarget: 'commonjs2' + if (options.webpack.server) { + const server = options.webpack.server.webpack || options.webpack.server || {} + const whitelist = [/\.css$/, /\?vue&type=style/].concat(options.webpack.server.nodeExternalsWhitelist || []) + const mode = options.webpack.mode || 'production' + const isProd = mode === 'production' + return (merge as any)( + getBaseConfig(options), + { + name: 'server', + target: 'node', + entry: './src/entry-server.js', + output: { + libraryTarget: 'commonjs2' + }, + externals: nodeExternals({ + // whitelist: /\.css$/ + whitelist + }), + performance: { + maxEntrypointSize: 1024 * 1024 * 6, + maxAssetSize: 1024 * 1024 * 3, + hints: isProd ? 'warning' : false + }, + plugins: [ + new VueSSRServerPlugin(), + new webpack.DefinePlugin({ + 'process.env.VUE_ENV': '"server"' + }) + ] }, - externals: nodeExternals({ - // whitelist: /\.css$/ - whitelist: [/\.css$/, /\?vue&type=style/] - }), - performance: { - maxEntrypointSize: 1024 * 1024 * 6, - maxAssetSize: 1024 * 1024 * 3, - hints: isProd ? 'warning' : false - }, - plugins: [ - new VueSSRServerPlugin(), - new webpack.DefinePlugin({ - 'process.env.VUE_ENV': '"server"' - }) - ] - }, - getStyle(options, { isServer: true }), - server - ) + getStyle(options, { isServer: true }), + server + ) + } else { + consola.fatal( + 'getServerConfig options.webpack.server is undefined' + ) + return process.exit(1) + } }