UNPKG

ponk

Version:

The development package for central platform of PO team.

135 lines (122 loc) 3.83 kB
require('shelljs/global'); const fs = require('fs'); const path = require('path'); const gulp = require('gulp4'); const browserSync = require('browser-sync'); const historyApiFallback = require('connect-history-api-fallback'); const webpack = require('webpack'); const webpackMerge = require('webpack-merge'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const baseConfig = require('./webpack.base.conf'); const util = require('../../util'); const minify = process.argv.indexOf('--minify') >= 0; const ENV = "Dev"; const prod = process.argv.indexOf('build-prod') >= 0; const getModuleEntities = () => { let moduleFolder = util.cwd('src/modules'); let modFolderArr = fs.readdirSync(moduleFolder); if (modFolderArr.length === 0) { throw new Error('请先创建至少一个模块'); } let modules = {}; modFolderArr.forEach(f => { if (f.indexOf('.') === 0) { // 忽略以.开头的目录 return; } if (!f.startsWith('po-')) {//只打包以po开头的模块 return; } let modulePath = path.join(moduleFolder, f); // 不是目录就忽略 if (!fs.statSync(modulePath).isDirectory()) { return; } modules[f] = `${modulePath}/index.ts`; }); return modules; }; gulp.task('clean', done => { rm('-rf', 'dist'); done(); }); gulp.task('bs-reload', done => { browserSync.reload(); util.notify('Build successfully.'); done(); }); gulp.task('serve', done => { browserSync.init({ server: { baseDir: 'dist/' }, middleware: [historyApiFallback()], ghostMode: false, port: 10000 }); done(); }); gulp.task('modules:js', done => { let modules = getModuleEntities(); // 构造opt let opt = webpackMerge(baseConfig, { entry: modules, output: { path: util.cwd('dist'), filename: 'modules/[name]/app.js', library: ['newkit', '[name]'], chunkFilename: '[id].js' }, plugins: [ new ExtractTextPlugin({ filename: 'modules/[name]/app.css', disable: false, allChunks: true }), new webpack.DefinePlugin({ 'process.env': { 'ENV': JSON.stringify(ENV) } }) ] }); if (minify) { opt.plugins.push( new webpack.optimize.UglifyJsPlugin({ mangle: { keep_fnames: true } }) ); } webpack(opt).watch({ aggregateTimeout: 500, ignored: [/node_modules/, /dist/] }, (err, stats) => { util.printWebpackStats(err, stats); setTimeout(() => { gulp.series('bs-reload')(); done(); }, 200); }); }); gulp.task('copyFramework', () => { return gulp.src([ util.root('dev-package/index.html') ]).pipe(gulp.dest(util.cwd('dist'))); }); gulp.task('copyResources', () => { return gulp.src([ `${util.cwd('src')}/module[s]/**/resources/**/*`, `${util.cwd('src')}/local-confi[g].js` ]).pipe(gulp.dest(util.cwd('dist'))); }); gulp.task('watchResources', done => { gulp.watch([ `${util.cwd('src')}/modules/**/resources/**/*`, `${util.cwd('src')}/local-config.js` ], gulp.series('copyResources')); done(); }); gulp.task('build', gulp.series( 'clean', gulp.parallel('modules:js', 'copyFramework', 'copyResources'), gulp.parallel('serve', 'watchResources') )); gulp.task('build-prod', gulp.series( 'clean', gulp.parallel('modules:js', 'copyFramework', 'copyResources') ));