ponk
Version:
The development package for central platform of PO team.
110 lines (98 loc) • 3.09 kB
JavaScript
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 = "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;
};
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();
// 构造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).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('default', gulp.series(
'clean',
gulp.parallel('modules:js', 'copyFramework', 'copyResources')
));