UNPKG

@bnorth/build

Version:

bnorth unique build tool

73 lines (64 loc) 1.98 kB
/** * Copyright (c) 2018, able99 * All rights reserved. * This source code is licensed under MIT. */ const babel = require('@babel/core'); const rimraf = require('rimraf'); const vfs = require('vinyl-fs'); const through = require('through2'); const { initEnv, resolveApp } = require('../config/env.config'); const { initBabelOption } = require('../config/babel.config'); const { initArgv } = require('../config/argv.config'); const CLIEngine = require("eslint").CLIEngine; function eslint(env, argv, watch) { console.log('# lint'); let config = { "baseConfig": {"extends": "react-app"}, rules: { 'no-unused-vars': ['warn',{args: 'none', ignoreRestSiblings: true}] } }; let cli = new CLIEngine(config); let report = cli.executeOnFiles([argv.src]); let formatter = cli.getFormatter(); console.log(formatter(report.results)); return !report.errorCount; } function babelTransform(env, argv, watch, scb, ecb) { console.log('# balbel transform'); !watch && rimraf.sync(argv.out); const stream = vfs .src([`${argv.src}/**/*.js`,`${argv.src}/**/*.jsx`]) .pipe(through.obj((f, enc, cb) => { try{ f.contents = new Buffer(babel.transform(f.contents, initBabelOption()).code); cb(null, f); }catch(e){ ecb&&ecb(e, f); } })) .pipe(vfs.dest(argv.out)); stream.on('end', ()=>scb&&scb()); } module.exports = function run(type, watch) { let argv = initArgv(type); let env = initEnv({type, env: argv.env}); argv.src = resolveApp(argv._[1]||'src'); argv.out = resolveApp(argv._[2]||'lib'); console.log(`# start build: ${env, env.appName}`); if(!eslint(env, argv, watch)) return; try { babelTransform(env, argv, watch, ()=>{ console.log('#OK'); console.log(); }, (e,f)=>{ console.log('#ERROR'); console.log(e); console.log(f.path); console.log(); }); } catch(e) { console.log('#ERROR'); console.log(e); console.log(); } }