UNPKG

ponk

Version:

The development package for central platform of PO team.

139 lines (124 loc) 4.13 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 tar = require('gulp-tar'); const Visualizer = require('webpack-visualizer-plugin'); const baseConfig = require('./webpack.base.conf'); const util = require('../../util'); const minify = process.argv.indexOf('--minify') >= 0; const ENV = "PRD"; 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; }; const createPackTasks = () => { const modules = getModuleEntities(); let packTasks = []; for (let name in modules) { if (modules.hasOwnProperty(name)) { let packTaskName = `pack_module_${name}`; let packSrcFolder = `${util.cwd('dist')}/modules/${name}`; let packDistFolder = `${util.cwd('dist')}/modules/pack`; gulp.task(packTaskName, () => { return gulp.src(`${packSrcFolder}/**/*`, { base: `${util.cwd('dist')}/modules` }) .pipe(tar(`${name}.tar`)) .pipe(gulp.dest(packDistFolder)); }); packTasks.push(packTaskName); } } return packTasks; } gulp.task('clean', done => { rm('-rf', 'dist'); 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(); packTasks = createPackTasks(); // 构造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) } }), new Visualizer({ filename: './statistics.html' }) ] }); if (minify) { opt.plugins.push( new webpack.optimize.UglifyJsPlugin({ mangle: { keep_fnames: true } }) ); } webpack(opt).run((err, stats) => { util.printWebpackStats(err, stats); done(); }); }); 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('packModules', gulp.parallel(...createPackTasks())); gulp.task('default', gulp.series( 'clean', gulp.parallel('modules:js', 'copyFramework', 'copyResources'), 'packModules' ));