mirror of https://github.com/alibaba/ice.git
158 lines
3.6 KiB
TypeScript
158 lines
3.6 KiB
TypeScript
import { expect, it, describe } from 'vitest';
|
|
import type { Configuration } from 'webpack';
|
|
import { removeLoader, addLoader, modifyLoader, modifyRule, removePlugin } from '../src/index';
|
|
|
|
describe('test webpack config modify', () => {
|
|
const getWebpackConfig = () => ({
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /.css$/,
|
|
use: [
|
|
{
|
|
loader: '/absoulte/path/to/postcss-loader',
|
|
},
|
|
{
|
|
loader: '/absoulte/path/to/css-loader',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
});
|
|
it('remove loader', () => {
|
|
const webpackConfig: Configuration = getWebpackConfig();
|
|
expect(removeLoader(webpackConfig, {
|
|
rule: '.css',
|
|
loader: 'css-loader',
|
|
})).toStrictEqual({
|
|
module: {
|
|
rules: [{
|
|
test: /.css$/,
|
|
use: [
|
|
{
|
|
loader: '/absoulte/path/to/postcss-loader',
|
|
},
|
|
],
|
|
}],
|
|
},
|
|
});
|
|
});
|
|
it('add loader', () => {
|
|
expect(addLoader(getWebpackConfig(), {
|
|
rule: '.css',
|
|
useItem: {
|
|
loader: 'custom-loader',
|
|
},
|
|
before: 'css-loader',
|
|
})).toStrictEqual({
|
|
module: {
|
|
rules: [{
|
|
test: /.css$/,
|
|
use: [
|
|
{
|
|
loader: '/absoulte/path/to/postcss-loader',
|
|
},
|
|
{
|
|
loader: 'custom-loader',
|
|
},
|
|
{
|
|
loader: '/absoulte/path/to/css-loader',
|
|
},
|
|
],
|
|
}],
|
|
},
|
|
});
|
|
expect(addLoader(getWebpackConfig(), {
|
|
rule: '.css',
|
|
useItem: {
|
|
loader: 'custom-loader',
|
|
},
|
|
after: 'css-loader',
|
|
})).toStrictEqual({
|
|
module: {
|
|
rules: [{
|
|
test: /.css$/,
|
|
use: [
|
|
{
|
|
loader: '/absoulte/path/to/postcss-loader',
|
|
},
|
|
{
|
|
loader: '/absoulte/path/to/css-loader',
|
|
},
|
|
{
|
|
loader: 'custom-loader',
|
|
},
|
|
],
|
|
}],
|
|
},
|
|
});
|
|
});
|
|
it('modify loader', () => {
|
|
expect(modifyLoader(getWebpackConfig(), {
|
|
rule: '.css',
|
|
loader: 'css-loader',
|
|
options: () => ({ module: true }),
|
|
})).toStrictEqual({
|
|
module: {
|
|
rules: [{
|
|
test: /.css$/,
|
|
use: [
|
|
{
|
|
loader: '/absoulte/path/to/postcss-loader',
|
|
},
|
|
{
|
|
loader: '/absoulte/path/to/css-loader',
|
|
options: { module: true },
|
|
},
|
|
],
|
|
}],
|
|
},
|
|
});
|
|
});
|
|
it('modify rule', () => {
|
|
const webpackConfig = getWebpackConfig();
|
|
webpackConfig.module.rules.push({
|
|
test: /.less/,
|
|
use: [],
|
|
});
|
|
expect(modifyRule(webpackConfig, {
|
|
rule: '.css',
|
|
options: () => ({
|
|
test: /.css$/,
|
|
use: [],
|
|
}),
|
|
})).toStrictEqual({
|
|
module: {
|
|
rules: [{
|
|
test: /.css$/,
|
|
use: [],
|
|
}, {
|
|
test: /.less/,
|
|
use: [],
|
|
}],
|
|
},
|
|
});
|
|
});
|
|
it('remove plugin', () => {
|
|
class TestPlugin {}
|
|
expect(removePlugin({
|
|
plugins: [
|
|
// @ts-ignore fake webpack plugin
|
|
new TestPlugin(),
|
|
],
|
|
}, 'TestPlugin')).toStrictEqual({
|
|
plugins: [],
|
|
});
|
|
});
|
|
it('miss loader', () => {
|
|
expect(removeLoader(getWebpackConfig(), {
|
|
rule: '.css',
|
|
loader: 'test-loader',
|
|
})).toStrictEqual(getWebpackConfig());
|
|
expect(removeLoader(getWebpackConfig(), {
|
|
rule: '.test',
|
|
loader: 'css-loader',
|
|
})).toStrictEqual(getWebpackConfig());
|
|
});
|
|
}); |