Skip to content
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

Flag to disable uglify for production builds #4755

Merged
merged 3 commits into from
Apr 2, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/gatsby-cli/src/create-cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ function buildLocalCommands(cli, isLocalSite) {
type: `boolean`,
default: false,
describe: `Build site with link paths prefixed (set prefix in your config).`,
}).option(`no-uglify`, {
type: `boolean`,
default: false,
describe: `Build site without uglifying JS bundles (for debugging).`,
}),
handler: handlerP(
getCommandHandler(`build`, (args, cmd) => {
Expand Down
1 change: 1 addition & 0 deletions packages/gatsby/src/commands/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type BuildArgs = {
sitePackageJson: object,
browserslist: string[],
prefixPaths: boolean,
noUglify: boolean,
}

module.exports = async function build(program: BuildArgs) {
Expand Down
4 changes: 2 additions & 2 deletions packages/gatsby/src/utils/babel-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ function findBabelPackage(directory) {
* the paths will be absolute so that Babel behaves as expected.
*/
module.exports = async function babelConfig(program, stage) {
const { directory } = program
const { directory, noUglify } = program

let babelrc = findBabelrc(directory) || findBabelPackage(directory)

Expand All @@ -149,7 +149,7 @@ module.exports = async function babelConfig(program, stage) {
require.resolve(`babel-preset-env`),
{
loose: true,
uglify: true,
uglify: !noUglify,
modules: `commonjs`,
targets: {
browsers: program.browserslist,
Expand Down
36 changes: 21 additions & 15 deletions packages/gatsby/src/utils/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ module.exports = async (
// webpack config.
const stage = suppliedStage
const babelConfig = await genBabelConfig(program, suppliedStage)
const { noUglify } = program

function processEnv(stage, defaultNodeEnv) {
debug(`Building env for "${stage}"`)
Expand Down Expand Up @@ -235,7 +236,7 @@ module.exports = async (
.getState()
.pages.map(page => page.componentChunkName)
components = uniq(components)
return [
const plugins = [
// Moment.js includes 100s of KBs of extra localization data by
// default in Webpack that most sites don't want. This line disables
// loading locale modules. This is a practical solution that requires
Expand Down Expand Up @@ -315,26 +316,31 @@ module.exports = async (
filename: `chunk-manifest.json`,
manifestVariable: `webpackManifest`,
}),
// Minify Javascript.
new webpack.optimize.UglifyJsPlugin({
compress: {
screw_ie8: true, // React doesn't support IE8
warnings: false,
},
mangle: {
screw_ie8: true,
},
output: {
comments: false,
screw_ie8: true,
},
}),
// Ensure module order stays the same. Supposibly fixed in webpack 2.0.
new webpack.optimize.OccurenceOrderPlugin(),
new GatsbyModulePlugin(),
// new WebpackStableModuleIdAndHash({ seed: 9, hashSize: 47 }),
new HashedChunkIdsPlugin(),
]
if (!noUglify) {
// Minify JavaScript.
plugins.push(
new webpack.optimize.UglifyJsPlugin({
compress: {
screw_ie8: true, // React doesn't support IE8
warnings: false,
},
mangle: {
screw_ie8: true,
},
output: {
comments: false,
screw_ie8: true,
},
})
)
}
return plugins
}
default:
throw new Error(`The state requested ${stage} doesn't exist.`)
Expand Down