UNPKG

cuz

Version:

Front-end modular development kit.

158 lines (125 loc) 4.34 kB
'use strict'; 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'];