From 3966989400d08bbce61417b3da3cb6949e57dafe Mon Sep 17 00:00:00 2001 From: Lyrkan Date: Sat, 25 Nov 2017 17:25:23 +0100 Subject: [PATCH] Fix output when using "--json" or "-j" option --- bin/encore.js | 6 +++-- lib/config-generator.js | 52 +++++++++++++++++++++---------------- lib/config/parse-runtime.js | 5 ++++ test/bin/encore.js | 35 +++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 24 deletions(-) diff --git a/bin/encore.js b/bin/encore.js index 614ac10f..2fda6ae0 100755 --- a/bin/encore.js +++ b/bin/encore.js @@ -45,8 +45,10 @@ if (runtimeConfig.useDevServer) { return require('webpack-dev-server/bin/webpack-dev-server'); } else { - console.log('Running webpack ...'); - console.log(); + if (!runtimeConfig.outputJson) { + console.log('Running webpack ...'); + console.log(); + } return require('webpack/bin/webpack'); } diff --git a/lib/config-generator.js b/lib/config-generator.js index 4bdcb881..14b98e8e 100644 --- a/lib/config-generator.js +++ b/lib/config-generator.js @@ -243,13 +243,15 @@ class ConfigGenerator { notifierPluginUtil(plugins, this.webpackConfig); - const friendlyErrorPlugin = friendlyErrorPluginUtil(this.webpackConfig); - plugins.push({ - plugin: friendlyErrorPlugin, - priority: PluginPriorities.FriendlyErrorsWebpackPlugin - }); + if (!this.webpackConfig.runtimeConfig.outputJson) { + const friendlyErrorPlugin = friendlyErrorPluginUtil(this.webpackConfig); + plugins.push({ + plugin: friendlyErrorPlugin, + priority: PluginPriorities.FriendlyErrorsWebpackPlugin + }); - assetOutputDisplay(plugins, this.webpackConfig, friendlyErrorPlugin); + assetOutputDisplay(plugins, this.webpackConfig, friendlyErrorPlugin); + } this.webpackConfig.plugins.forEach(function(plugin) { plugins.push(plugin); @@ -274,22 +276,28 @@ class ConfigGenerator { buildStatsConfig() { // try to silence as much as possible: the output is rarely helpful // this still doesn't remove all output - return { - hash: false, - version: false, - timings: false, - assets: false, - chunks: false, - maxModules: 0, - modules: false, - reasons: false, - children: false, - source: false, - errors: false, - errorDetails: false, - warnings: false, - publicPath: false, - }; + let stats = {}; + + if (!this.webpackConfig.runtimeConfig.outputJson) { + stats = { + hash: false, + version: false, + timings: false, + assets: false, + chunks: false, + maxModules: 0, + modules: false, + reasons: false, + children: false, + source: false, + errors: false, + errorDetails: false, + warnings: false, + publicPath: false, + }; + } + + return stats; } buildDevServerConfig() { diff --git a/lib/config/parse-runtime.js b/lib/config/parse-runtime.js index 35717b7f..26233c0f 100644 --- a/lib/config/parse-runtime.js +++ b/lib/config/parse-runtime.js @@ -24,6 +24,7 @@ module.exports = function(argv, cwd) { runtimeConfig.command = argv._[0]; runtimeConfig.useDevServer = false; runtimeConfig.useHotModuleReplacement = false; + runtimeConfig.outputJson = false; switch (runtimeConfig.command) { case 'dev': @@ -68,6 +69,10 @@ module.exports = function(argv, cwd) { runtimeConfig.helpRequested = true; } + if (argv.j || argv.json) { + runtimeConfig.outputJson = true; + } + runtimeConfig.babelRcFileExists = (typeof resolveRc(require('fs'), runtimeConfig.context)) !== 'undefined'; return runtimeConfig; diff --git a/test/bin/encore.js b/test/bin/encore.js index ff838431..6998c594 100644 --- a/test/bin/encore.js +++ b/test/bin/encore.js @@ -11,6 +11,7 @@ const chai = require('chai'); chai.use(require('chai-fs')); +const expect = chai.expect; const path = require('path'); const testSetup = require('../../lib/test/setup'); const fs = require('fs-extra'); @@ -88,4 +89,38 @@ export default config; done(); }); }); + + it('Smoke test using the --json option', (done) => { + testSetup.emptyTmpDir(); + const testDir = testSetup.createTestAppDir(); + + fs.writeFileSync( + path.join(testDir, 'webpack.config.js'), + ` +const Encore = require('../../index.js'); +Encore + .setOutputPath('build/') + .setPublicPath('/build') + .addEntry('main', './js/no_require') +; + +module.exports = Encore.getWebpackConfig(); + ` + ); + + const binPath = path.resolve(__dirname, '../', '../', 'bin', 'encore.js'); + exec(`node ${binPath} dev --json --context=${testDir}`, { cwd: testDir }, (err, stdout, stderr) => { + if (err) { + throw new Error(`Error executing encore: ${err} ${stderr} ${stdout}`); + } + + const parsedOutput = JSON.parse(stdout); + + expect(parsedOutput).to.be.an('object'); + expect(parsedOutput.modules).to.be.an('array'); + expect(parsedOutput.modules.length).to.equal(1); + + done(); + }); + }); });