-
Notifications
You must be signed in to change notification settings - Fork 278
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: support output bundler unminified #772
base: master
Are you sure you want to change the base?
Changes from 6 commits
12cdad4
cf6e64e
a4bd9f6
6586a4f
b772c4a
ba8e33c
4b93f51
dc87148
97adfde
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
import { JSMinifier } from '@umijs/bundler-webpack/dist/types'; | ||
import { winPath } from '@umijs/utils'; | ||
import assert from 'assert'; | ||
import { Minimatch } from 'minimatch'; | ||
import path from 'path'; | ||
import { loadConfig } from 'tsconfig-paths'; | ||
|
@@ -24,6 +26,7 @@ export interface IBundleConfig | |
Omit<IFatherBundleConfig, 'entry' | 'output'> { | ||
type: IFatherBuildTypes.BUNDLE; | ||
bundler: 'webpack'; | ||
jsMinifier: JSMinifier; | ||
entry: string; | ||
output: { | ||
filename: string; | ||
|
@@ -111,55 +114,97 @@ 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`, | ||
Jinbao1001 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// default to output dist | ||
path: output.path || 'dist/umd', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 这部分还是可以继续放在公共配置里? |
||
}, | ||
}; | ||
// 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 }; | ||
if (singleConfig.generateUnminified) { | ||
assert( | ||
Jinbao1001 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
!entryOutput.filename?.includes('.min'), | ||
'if set generateUnminified enabled, you need to delete ".min" in the output filename config', | ||
); | ||
} | ||
|
||
configs.push({ | ||
const minifiedConfig = { | ||
...bundleConfig, | ||
|
||
// override all configs from entry config | ||
...entryConfig[entry], | ||
...singleConfig, | ||
entry, | ||
|
||
// override output | ||
jsMinifier: JSMinifier.terser, | ||
output: { | ||
filename: | ||
entryOutput.filename || `${path.parse(entry).name}.min.js`, | ||
path: entryOutput.path || bundleConfig.output.path, | ||
filename: entryOutput.filename | ||
? `${entryOutput.filename}${ | ||
singleConfig.generateUnminified ? '.min' : '' | ||
}` | ||
: `${path.parse(entry).name}.min.js`, | ||
path: entryOutput.path || output.path || 'dist/umd', | ||
}, | ||
}); | ||
}; | ||
|
||
if (singleConfig.generateUnminified) { | ||
const unminifiedConfig = { | ||
...bundleConfig, | ||
...singleConfig, | ||
entry, | ||
jsMinifier: JSMinifier.none, | ||
sourcemap: false, | ||
output: { | ||
filename: entryOutput.filename || `${path.parse(entry).name}.js`, | ||
path: entryOutput.path || output.path || 'dist/umd', | ||
}, | ||
}; | ||
configs.push(unminifiedConfig, minifiedConfig); | ||
} else { | ||
configs.push(minifiedConfig); | ||
} | ||
}); | ||
} else { | ||
// generate single entry to single config | ||
const defaultEntry = entryConfig || 'src/index'; | ||
const defaultFileName = getAutoBundleFilename(pkg.name); | ||
if (umd.generateUnminified) { | ||
if (umd.generateUnminified) { | ||
Jinbao1001 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
assert( | ||
!output.filename?.includes('.min'), | ||
'if set generateUnminified enabled, you need to delete ".min" in the output filename config', | ||
); | ||
} | ||
configs.push({ | ||
...bundleConfig, | ||
entry: defaultEntry, | ||
jsMinifier: JSMinifier.none, | ||
sourcemap: false, | ||
output: { | ||
filename: output.filename | ||
? `${output.filename}.js` | ||
: `${defaultFileName}.js`, | ||
path: output.path || 'dist/umd', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 这个默认值还是写了多次;可以 |
||
}, | ||
}); | ||
} | ||
|
||
configs.push({ | ||
...bundleConfig, | ||
|
||
// default to bundle src/index | ||
entry: entryConfig || 'src/index', | ||
entry: defaultEntry, | ||
jsMinifier: JSMinifier.terser, | ||
output: { | ||
filename: output.filename | ||
? `${output.filename}${umd.generateUnminified ? '.min' : ''}` | ||
: `${defaultFileName}.min.js`, | ||
path: output.path || 'dist/umd', | ||
}, | ||
}); | ||
} | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个版本号是误提交的?