Skip to content

Commit

Permalink
Flag to disable uglify for production builds (#4755)
Browse files Browse the repository at this point in the history
* add no-uglify option to build command

* uglify js bundles based on cli arg

* fix formatting
  • Loading branch information
tsriram authored and KyleAMathews committed Apr 2, 2018
1 parent 84e7b7f commit fcc5019
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 17 deletions.
4 changes: 4 additions & 0 deletions packages/gatsby-cli/src/create-cli.js
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
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
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
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

0 comments on commit fcc5019

Please sign in to comment.