Skip to content

Commit

Permalink
feat: support output bundler uncomporess
Browse files Browse the repository at this point in the history
  • Loading branch information
Jinbao1001 committed Aug 21, 2024
1 parent 94a47f5 commit 12cdad4
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 43 deletions.
27 changes: 14 additions & 13 deletions src/builder/bundle/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ interface IBundleOpts {
incremental?: boolean;
}

function bundle(opts: Omit<IBundleOpts, 'watch' | 'incremental'>): Promise<void>;
function bundle(
opts: Omit<IBundleOpts, 'watch' | 'incremental'>,
): Promise<void>;
function bundle(opts: IBundleOpts): Promise<IBundleWatcher>;
async function bundle(opts: IBundleOpts): Promise<void | IBundleWatcher> {
const enableCache = process.env.FATHER_CACHE !== 'none';
Expand Down Expand Up @@ -68,7 +70,6 @@ async function bundle(opts: IBundleOpts): Promise<void | IBundleWatcher> {
devtool: config.sourcemap && 'source-map',
externals: config.externals,
outputPath: config.output.path,

// postcss config
extraPostCSSPlugins,
postcssLoader,
Expand All @@ -80,7 +81,7 @@ async function bundle(opts: IBundleOpts): Promise<void | IBundleWatcher> {

// compatible with IE11 by default
targets: getBundleTargets(config),
jsMinifier: JSMinifier.terser,
jsMinifier: config.jsMinifier,
cssMinifier: CSSMinifier.cssnano,
extraBabelIncludes: [/node_modules/],

Expand Down Expand Up @@ -165,21 +166,21 @@ async function bundle(opts: IBundleOpts): Promise<void | IBundleWatcher> {
// enable webpack persistent cache
...(enableCache
? {
cache: {
buildDependencies: opts.buildDependencies,
},
}
cache: {
buildDependencies: opts.buildDependencies,
},
}
: {}),

// collect close handlers for watch mode
...(opts.watch
? {
onBuildComplete({ isFirstCompile, close }: any) {
if (isFirstCompile) closeHandlers.push(close);
// log for watch mode
else logStatus();
},
}
onBuildComplete({ isFirstCompile, close }: any) {
if (isFirstCompile) closeHandlers.push(close);
// log for watch mode
else logStatus();
},
}
: {}),
disableCopy: true,
});
Expand Down
87 changes: 57 additions & 30 deletions src/builder/config.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { JSMinifier } from '@umijs/bundler-webpack/dist/types';
import { winPath } from '@umijs/utils';
import { Minimatch } from 'minimatch';
import path from 'path';
Expand All @@ -24,6 +25,7 @@ export interface IBundleConfig
Omit<IFatherBundleConfig, 'entry' | 'output'> {
type: IFatherBuildTypes.BUNDLE;
bundler: 'webpack';
jsMinifier: JSMinifier;
entry: string;
output: {
filename: string;
Expand Down Expand Up @@ -111,55 +113,80 @@ export function normalizeUserConfig(
const entryConfig = umd.entry;
const output =
typeof umd.output === 'object' ? umd.output : { path: umd.output };
const bundleConfig: Omit<IBundleConfig, 'entry'> = {
type: IFatherBuildTypes.BUNDLE,
bundler: 'webpack',
...baseConfig,
const bundleConfig: Omit<IBundleConfig, 'entry' | 'output' | 'jsMinifier'> =
{
type: IFatherBuildTypes.BUNDLE,
bundler: 'webpack',
...baseConfig,

// override base configs from umd config
...umd,

// generate default output
output: {
// default to generate filename from package name
filename:
output.filename || `${getAutoBundleFilename(pkg.name)}.min.js`,
// default to output dist
path: output.path || 'dist/umd',
},
};
// override base configs from umd config
...umd,
};

if (typeof entryConfig === 'object') {
// extract multiple entries to single configs
Object.keys(entryConfig).forEach((entry) => {
const outputConfig = entryConfig[entry].output;
Object.entries(entryConfig).forEach(([entry, singleConfig]) => {
const outputConfig = singleConfig.output;
const entryOutput =
typeof outputConfig === 'object'
? outputConfig
: { path: outputConfig };

configs.push({
const unminifiedConfig = {
...bundleConfig,

// override all configs from entry config
...entryConfig[entry],
...singleConfig,
entry,
jsMinifier: JSMinifier.none,
sourcemap: false,
output: {
filename: entryOutput.filename || `${path.parse(entry).name}.js`,
path: entryOutput.path || output.path || 'dist/umd',
},
};

// override output
const minifiedConfig = {
...bundleConfig,
...singleConfig,
entry,
jsMinifier: JSMinifier.terser,
output: {
filename:
entryOutput.filename || `${path.parse(entry).name}.min.js`,
path: entryOutput.path || bundleConfig.output.path,
path: entryOutput.path || output.path || 'dist/umd',
},
});
};

if (singleConfig.generateUnminified) {
configs.push(unminifiedConfig, minifiedConfig);
} else {
configs.push(minifiedConfig);
}
});
} else {
// generate single entry to single config
const defaultEntry = entryConfig || 'src/index';
const defaultOutput = {
filename:
output.filename || `${getAutoBundleFilename(pkg.name)}.min.js`,
path: output.path || 'dist/umd',
};

if (umd.generateUnminified) {
configs.push({
...bundleConfig,
entry: defaultEntry,
jsMinifier: JSMinifier.none,
sourcemap: false,
output: {
filename: `${getAutoBundleFilename(pkg.name)}.js`,
path: output.path || 'dist/umd',
},
});
}

configs.push({
...bundleConfig,

// default to bundle src/index
entry: entryConfig || 'src/index',
entry: defaultEntry,
jsMinifier: JSMinifier.terser,
output: defaultOutput,
});
}
}
Expand Down
1 change: 1 addition & 0 deletions src/features/configPlugins/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export function getSchemas(): Record<string, (Joi: Root) => any> {
Joi.string(),
Joi.array(),
),
generateUnminified: Joi.boolean().optional(),
chainWebpack: Joi.function().optional(),
extractCSS: Joi.boolean().optional(),
name: Joi.string().optional(),
Expand Down
7 changes: 7 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,13 @@ export interface IFatherBundleConfig extends IFatherBaseConfig {
* configure less variables
*/
theme?: Record<string, string>;

/**
* output unminified js file
* @default false
* @note When set to true, unminified js file will be generated in the same directory without sourcemap.
*/
generateUnminified?: boolean;
}

export interface IFatherPreBundleConfig {
Expand Down

0 comments on commit 12cdad4

Please sign in to comment.