mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-05 05:07:14 +02:00
107 lines
2.7 KiB
JavaScript
107 lines
2.7 KiB
JavaScript
import {validate} from 'webpack';
|
|
import path from 'path';
|
|
import Config from 'webpack-chain';
|
|
|
|
import {applyConfigureWebpack, applyChainWebpack} from '@lib/webpack/utils';
|
|
|
|
describe('extending generated webpack config', () => {
|
|
test('direct mutation on generated webpack config object', async () => {
|
|
// fake generated webpack config
|
|
let config = {
|
|
output: {
|
|
path: __dirname,
|
|
filename: 'bundle.js'
|
|
}
|
|
};
|
|
|
|
/* eslint-disable */
|
|
const configureWebpack = (generatedConfig, isServer) => {
|
|
if (!isServer) {
|
|
generatedConfig.entry = 'entry.js';
|
|
generatedConfig.output = {
|
|
path: path.join(__dirname, 'dist'),
|
|
filename: 'new.bundle.js'
|
|
};
|
|
}
|
|
};
|
|
/* eslint-enable */
|
|
|
|
config = applyConfigureWebpack(configureWebpack, config, false);
|
|
expect(config).toEqual({
|
|
entry: 'entry.js',
|
|
output: {
|
|
path: path.join(__dirname, 'dist'),
|
|
filename: 'new.bundle.js'
|
|
}
|
|
});
|
|
const errors = validate(config);
|
|
|
|
console.log(errors);
|
|
expect(errors.length).toBe(0);
|
|
});
|
|
|
|
test('webpack-merge with user webpack config object', async () => {
|
|
// fake generated webpack config
|
|
let config = {
|
|
output: {
|
|
path: __dirname,
|
|
filename: 'bundle.js'
|
|
}
|
|
};
|
|
|
|
/* eslint-disable */
|
|
const configureWebpack = {
|
|
entry: 'entry.js',
|
|
output: {
|
|
path: path.join(__dirname, 'dist'),
|
|
filename: 'new.bundle.js'
|
|
}
|
|
};
|
|
/* eslint-enable */
|
|
|
|
config = applyConfigureWebpack(configureWebpack, config, false);
|
|
expect(config).toEqual({
|
|
entry: 'entry.js',
|
|
output: {
|
|
path: path.join(__dirname, 'dist'),
|
|
filename: 'new.bundle.js'
|
|
}
|
|
});
|
|
const errors = validate(config);
|
|
expect(errors.length).toBe(0);
|
|
});
|
|
|
|
test('use webpack-chain API', async () => {
|
|
// fake generated webpack config in webpack-chain format
|
|
let config = new Config();
|
|
config.output.path(__dirname).filename('bundle.js');
|
|
|
|
// user chainWebpack
|
|
/* eslint-disable */
|
|
const chainWebpack = (oldConfig, isServer) => {
|
|
if (!isServer) {
|
|
oldConfig.entry('main').add('./entry.js');
|
|
oldConfig.output
|
|
.path(path.join(__dirname, 'dist'))
|
|
.filename('new.bundle.js');
|
|
}
|
|
};
|
|
/* eslint-enable */
|
|
|
|
applyChainWebpack(chainWebpack, config, false);
|
|
|
|
// transform to webpack configuration object format
|
|
config = config.toConfig();
|
|
expect(config).toEqual({
|
|
output: {
|
|
path: path.join(__dirname, 'dist'),
|
|
filename: 'new.bundle.js'
|
|
},
|
|
entry: {
|
|
main: ['./entry.js']
|
|
}
|
|
});
|
|
const errors = validate(config);
|
|
expect(errors.length).toBe(0);
|
|
});
|
|
});
|