Skip to content

Commit 14783ac

Browse files
ycjcl868sorrycc
authored andcommitted
feat: ssr support externalWhitelist config (umijs#2733)
1 parent 719fc7b commit 14783ac

6 files changed

Lines changed: 56 additions & 4 deletions

File tree

docs/config/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,10 @@ When enabled, `umi.server.js` file is also generated when the client static file
264264

265265
```js
266266
export default {
267-
ssr: true,
267+
ssr: {
268+
// https://github.com/liady/webpack-node-externals#optionswhitelist-
269+
externalWhitelist: [],
270+
},
268271
// 需要开启
269272
manifest: {},
270273
};

docs/zh/config/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,10 @@ export default {
266266

267267
```js
268268
export default {
269-
ssr: true,
269+
ssr: {
270+
// https://github.com/liady/webpack-node-externals#optionswhitelist-
271+
externalWhitelist: [],
272+
},
270273
// need enable
271274
manifest: {},
272275
};

packages/umi-build-dev/src/Service.test.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,4 +449,31 @@ describe('Service', () => {
449449
chunkFilename: '[name].server.async.js',
450450
});
451451
});
452+
453+
it('runCommand ssr externalWhitelist', () => {
454+
const service = new Service({
455+
cwd: join(fixtures, 'plugin-ssr', 'externalWhitelist'),
456+
});
457+
const callback = jest.fn(() => {});
458+
service.registerCommand(
459+
'build',
460+
{
461+
webpack: {},
462+
},
463+
callback,
464+
);
465+
service.runCommand('build');
466+
467+
expect(service.config.ssr.externalWhitelist).toEqual(
468+
expect.arrayContaining([/^@alipay\/bigfish(\/.*)?$/, 'antd-mobile']),
469+
);
470+
expect(service.webpackConfig).toBeTruthy();
471+
expect(
472+
pick(service.ssrWebpackConfig.output, ['libraryTarget', 'filename', 'chunkFilename']),
473+
).toEqual({
474+
libraryTarget: 'commonjs2',
475+
filename: '[name].server.js',
476+
chunkFilename: '[name].server.async.js',
477+
});
478+
});
452479
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export default {
2+
ssr: {
3+
externalWhitelist: [ /^@alipay\/bigfish(\/.*)?$/, 'antd-mobile' ]
4+
},
5+
manifest: {},
6+
}

packages/umi-build-dev/src/getWebpackConfig.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import assert from 'assert';
33
import chalk from 'chalk';
44
import nodeExternals from 'webpack-node-externals';
55

6+
const debug = require('debug')('umi-build-dev:getWebpackConfig');
7+
68
export default function(service, opts = {}) {
79
const { ssr } = opts;
810
const { config } = service;
@@ -45,8 +47,14 @@ export default function(service, opts = {}) {
4547
`WARNING: UmiJS SSR is still in beta, you can open issues or PRs in https://github.com/umijs/umi`,
4648
),
4749
);
50+
const externalWhitelist = [
51+
/\.(css|less|sass|scss)$/,
52+
/^umi(\/.*)?$/,
53+
...(ssr.externalWhitelist || []),
54+
];
55+
debug(`externalWhitelist:`, externalWhitelist);
4856
webpackConfig.externals = nodeExternals({
49-
whitelist: [/\.(css|less|sass|scss)$/, /^umi(\/.*)?$/],
57+
externalWhitelist,
5058
});
5159
webpackConfig.output.libraryTarget = 'commonjs2';
5260
webpackConfig.output.filename = '[name].server.js';

packages/umi-types/config.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ export interface IAFWebpackConfig {
6565
urlLoaderExcludes?: Condition[];
6666
}
6767

68+
type WhitelistOption = string | RegExp;
69+
export interface IExportSSROpts {
70+
externalWhitelist?: WhitelistOption[];
71+
}
72+
6873
interface IConfig extends IAFWebpackConfig {
6974
// basic config
7075
// sorted by alphabet
@@ -87,7 +92,7 @@ interface IConfig extends IAFWebpackConfig {
8792
targets?: {
8893
[key: string]: number;
8994
};
90-
ssr?: boolean | object;
95+
ssr?: boolean | IExportSSROpts;
9196
}
9297

9398
export default IConfig;

0 commit comments

Comments
 (0)