cuz
Version:
Front-end modular development kit.
158 lines (125 loc) • 4.34 kB
JavaScript
var _Object$keys = require('babel-runtime/core-js/object/keys')['default'];
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
exports.__esModule = true;
exports['default'] = cli;
var _nopt = require('nopt');
var _nopt2 = _interopRequireDefault(_nopt);
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _cheerio = require('cheerio');
var _cheerio2 = _interopRequireDefault(_cheerio);
var _webpack = require('webpack');
var basedir = process.cwd();
var optlist = {
init: {
into: 'init a templete',
type: String
},
dev: {
info: 'dev for debug.',
type: Boolean
},
build: {
info: 'build for delopy.',
type: Boolean
},
version: {
short: 'v',
info: 'display current version.',
type: Boolean
},
help: {
short: 'h',
info: 'help info.',
type: Boolean
}
};
var aliases = {};
var known = {};
_Object$keys(optlist).forEach(function parse(key) {
var short = optlist[key].short;
if (short) {
aliases[short] = '--' + key;
}
known[key] = optlist[key].type;
});
function cli() {
var parsed = _nopt2['default'](known, aliases, process.argv, 2);
var arg = parsed.argv.cooked;
if (arg.length === 0) {
arg = ['dev', '--dev'];
}
var option = arg[0] || 'dev';
var env = 'development';
if (option === 'build') {
env = 'production';
}
if (['-test', '--test', '-testing', '--testing'].indexOf(arg[1]) > -1) {
env = 'testing';
}
if (['-prd', '--prd', '-production', '--production'].indexOf(arg[1]) > -1) {
env = 'production';
}
if (option === '--version') {
var packageInfo = require('../../package.json');
var version = packageInfo.version;
console.log('cuz v' + version);
}
if (option === '--help') {
console.log('Not implemented.');
}
if (option === 'dev') {
require('./server')({ env: env });
}
if (option === 'build') {
(function () {
var config = require('./webpack.production.config.js');
config.plugins.push(new _webpack.DefinePlugin({ 'process.env.NODE_ENV': '"' + env + '"' }));
var _require = require(basedir + '/package.json');
var name = _require.name;
var version = _require.version;
var _require2 = require(basedir + '/src/config.js');
var publicPath = _require2.publicPath;
publicPath = publicPath || '';
publicPath = publicPath.replace('{name}', name).replace('{version}', version);
publicPath = publicPath[publicPath.length - 1] === '/' ? publicPath : publicPath + '/';
// 修改 index.html 以适配 cdn 环境
_fsExtra2['default'].readFile(basedir + '/src/index.html', 'utf8', function done(err, data) {
var $ = _cheerio2['default'].load(data);
$('\n <script src="' + publicPath + 'cuz.js"></script>').insertAfter('#root');
var html = $.html().replace('<script src="index.js"></script>', '<script src="' + publicPath + 'index.js"></script>');
_fsExtra2['default'].outputFile(basedir + '/build/index.html', html);
console.log('copied \'index.html\'.');
});
// 临时处理静态资源文件 (这里应该使用 webpack 打包)
['img', 'imgs', 'image', 'images', 'vendor', 'vendors'].map(function (item) {
_fsExtra2['default'].exists(basedir + '/src/' + item, function (exists) {
if (exists) {
_fsExtra2['default'].copy(basedir + '/src/' + item + '/', basedir + '/build/' + item + '/', function done() {
console.log('copied static resources [' + item + '].');
});
}
});
});
// 打包业务代码
console.log('bundle package.');
var webpack = require('webpack');
config.output.publicPath = publicPath;
console.log('public address:' + publicPath);
webpack(config).run(function (errMsg, info) {
return console.log(errMsg + info);
});
})();
}
if (option === 'init') {
_fsExtra2['default'].copy(basedir + '/node_modules/cuz/templete/backend', basedir, function done(err) {
if (err) {
return console.log(err);
}
console.log('init backend templete complete.');
console.log('You can use `cuz` to start dev.');
});
}
}
module.exports = exports['default'];
;