@cisdi/pangu
Version:
develop tool for ui-engine project
91 lines (79 loc) • 2.52 kB
JavaScript
// load env first
require('dotenv').config()
// apply NODE_ENV
process.env.NODE_ENV = 'production'
const program = require('commander')
const webpack = require('webpack')
const webpackConfig = require('./config/webpack')
const rimraf = require('rimraf')
const signale = require('signale')
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages')
const printBuildError = require('react-dev-utils/printBuildError')
const updateNotifier = require('update-notifier')
const pkg = require('../package.json')
const checkDeps = require('./utils/check-deps')
// notify for update
updateNotifier({ pkg }).notify()
/**
* Usage
*/
program
.usage('[options]')
.option('-a,--ana', 'start webpack bundle analyzer')
.option('--ts-check', 'check typescript')
.parse(process.argv)
checkDeps()
signale.info('Clean build output dir\n')
// clean dist first
rimraf.sync(`${webpackConfig.output.path}/*`)
const compiler = webpack(webpackConfig)
signale.info('Compile start')
// create compiler
compiler.run((err, stats) => {
let messages
// normal error from process
if (err) {
let errMessage = err.message
if (errMessage) {
// Add additional information for postcss errors
if (Object.prototype.hasOwnProperty.call(err, 'postcssNode')) {
errMessage +=
'\nCompileError: Begins at CSS selector ' + err.postcssNode.selector
}
messages = formatWebpackMessages({
errors: [errMessage],
warnings: [],
})
}
} else {
messages = formatWebpackMessages(
stats.toJson({ all: false, warnings: true, errors: true })
)
}
if (messages.errors.length) {
// Only keep the first error. Others are often indicative
// of the same problem, but confuse the reader with noise.
if (messages.errors.length > 1) {
messages.errors.length = 1
}
messages = messages.errors.join('\n\n')
}
if (stats.hasErrors()) {
const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true'
if (tscCompileOnError) {
signale.error(
'Compiled with the following type errors (you may want to check these before deploying your app):\n'
)
printBuildError(messages)
} else {
signale.error('Failed to compile.\n')
printBuildError(messages)
process.exit(1)
}
} else if (stats.hasWarnings()) {
signale.warn('Compiled with warnings.\n')
console.log(messages.warnings.join('\n\n'))
} else {
signale.success('Compiled successfully.\n')
}
})