@bitberry/bankai-revolutions-cli
Version:
zero config webpack runner
83 lines (65 loc) • 2.56 kB
JavaScript
const webpack = require('webpack')
const nodemon = require('nodemon')
const path = require('path')
const fs = require('fs')
const once = require('ramda').once
const paths = require('../../../config/paths')
const defaultConfig = require('../../../config/webpack.config')
const moduleConfig = require('./config')
const Command = require('../../../core/Command')
const command = new Command({
name: 'run [options] [file]',
options: moduleConfig.options,
action: (commandInstance, scriptFilename) => {
if(!scriptFilename) scriptFilename = 'index.js'
if(!scriptFilename.endsWith('.js')){
scriptFilename = path.join(scriptFilename, 'index.js')
}
paths.sourcePath = path.join(process.cwd(), scriptFilename)
paths.sourceFile = scriptFilename.replace(/\//g, '_')//paths.sourcePath.split(path.sep).reverse()[0]
const configPath = path.resolve('bankai.config.js')
const options = {
env: process.env.NODE_ENV || 'development',
paths
}
let userConfig = {}
if(fs.existsSync(configPath)){
const userConfigModule = require(configPath)
userConfig = userConfigModule.default || userConfigModule
}
const serverConfig = userConfig.webpack
? userConfig.webpack(defaultConfig(options), options, webpack)
: defaultConfig(options)
process.on('SIGINT', process.exit)
const serverCompiler = webpack(serverConfig)
const startServer = () => {
const serverPaths = Object
.keys(serverCompiler.options.entry)
.map(entry => path.join(serverCompiler.options.output.path, `${ paths.sourceFile }`))
let inspectFlag = process.argv.splice(2).find((arg) => {
return arg.startsWith('--inspect=')
})
let startArgs = process.argv.slice(2)
if(inspectFlag){
startArgs = [inspectFlag]
}
nodemon({
script: serverPaths[0],
watch: serverPaths,
nodeArgs: startArgs
})
.on('error', (err) => {
console.log(err)
})
.on('quit', process.exit)
}
const startServerOnce = once((err, stats) => {
if(err){
return
}
startServer()
})
serverCompiler.watch(serverConfig.watchOptions || {}, startServerOnce)
}
})
command.Run()