123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- //var wrench = require('wrench');
- var gulp = require('gulp');
- var del = require('del');
- var path = require('path');
- var fs = require('fs');
- var gutil = require('gulp-util');
- var minimist = require('minimist');
- var less = require('gulp-less');
- var minifyCss = require('gulp-minify-css');
- var uglify = require('gulp-uglify');
- var rename = require('gulp-rename');
- var footer = require('gulp-footer');
- var webpack = require('webpack-stream');
- var wb = require('webpack');
- var webserver = require('gulp-webserver');
- var replace = require('gulp-replace');
- var babel = require('gulp-babel');
- var es2015 = require('babel-preset-es2015');
- var gulpif = require('gulp-if');
- var basePath = process.env.PJ_PATH;
- var absPath = 'http://127.0.0.1:8080/efunbox-to-b/1.0.0';
- //var absPath = 'http://lj-web.api.ai160.com/build';
- //var absPath = 'http://2blj.api.ai160.com/build';
- //var absPath = 'http://114.215.119.26:80/efunbox-to-b/1.0.0';
- var pkg = {}
- //兼容
- if(fs.existsSync(path.join(basePath, 'src/package.json'))){
- pkg = require(path.join(basePath, 'src/package.json'))
- }else{
- pkg = require(path.join(basePath, 'package.json'))
- fs.writeFileSync(path.join(basePath, 'src/package.json'), fs.readFileSync(path.join(basePath, 'package.json'), 'utf-8'), 'utf-8');
- fs.unlinkSync(path.join(basePath, 'package.json'));
- }
- //moye配置
- var moyeConf = fs.existsSync(path.join(basePath, 'moye.json')) ? require(path.join(basePath, 'moye.json')) : {}
- //js uglify config
- var uglifyConf = {
- compress: {
- drop_console: true
- },
- output:{
- ascii_only:true
- }
- }
- //server端口号
- var port = minimist(process.argv.slice(2), {string: 'port'}).port;
- var serverWatch = eval(minimist(process.argv.slice(3), {string: 'watch'}).watch);
- var isUglify = eval(minimist(process.argv.slice(3), {string: 'uglify'}).uglify);
- //老版本兼容
- process.env.C_PATH = fs.existsSync(path.join(basePath, 'src/stage')) ? 'stage' : 'page'
- // 获取stage列表
- var stages = []
- fs.readdirSync(path.join(basePath, 'src/'+process.env.C_PATH)).forEach(function(item){
- if(fs.statSync(path.join(basePath, 'src/'+process.env.C_PATH+'/'+item)).isDirectory()) stages.push(item)
- });
- var entry = {};
- for (var i = 0; i < stages.length; i++) {
- var exists = fs.existsSync(path.join(basePath, 'src/'+process.env.C_PATH+'/' + stages[i] + '/index.js'));
- if (exists) {
- entry[stages[i]] = path.join(basePath, 'src/'+process.env.C_PATH+'/') + stages[i] + '/index.js';
- }
- }
- // 获取template列表
- var templates = []
- fs.readdirSync(path.join(basePath, 'src/res/tpl')).forEach(function(item){
- if(!fs.statSync(path.join(basePath, 'src/res/tpl/'+item)).isDirectory() && /(\.tpl)$|(\.jade)$|(\.juicer)$|(\.ejs)$/g.test(item)) templates.push(item)
- });
- var templates_entry = {};
- for (var i = 0; i < templates.length; i++) {
- var exists = fs.existsSync(path.join(basePath, 'src/res/tpl/' + templates[i]));
- if (exists) {
- entry[templates[i]] = path.join(basePath, 'src/res/tpl/') + templates[i];
- }
- }
- //webpack配置
- var webpackConf = function(entry, buidPath){
- var conf = {
- cache: true,
- entry: entry,
- output: {
- path: path.join(basePath, './build/' + buidPath),
- filename:'[name].js',
- chunkFilename: 'module.[name].js'
- },
- module: {
- loaders: [{
- test: /\.js$/,
- loader: 'babel'
- },{
- test: /\.jade$/,
- loader: 'jade-loader'
- },{
- test: /\.ejs$/,
- loader: 'ejs-loader'
- },{
- test: /\.tpl$/,
- loader: 'tpl-loader'
- },{
- test: /\.juicer$/,
- loader: 'juicer-loader'
- },{
- test: /\.json$/,
- loader: 'json-loader'
- }],
- },
- resolveLoader: {
- root:[
- path.resolve(__dirname, '../../../node_modules'),
- path.resolve(__dirname, '../')
- ]
- },
- devtool: 'inline-source-map',
- plugins: [new wb.optimize.DedupePlugin()]
- }
- if(moyeConf.online && moyeConf.online.basePath) conf.output.publicPath = moyeConf.online.basePath
- return conf
- }
- //模板预编译
- gulp.task('compile-template', function(){
- for (var i = 0; i < templates.length; i++) {
- var entry = {};
- entry[templates[i]] = path.join(basePath, 'src/res/tpl/' + templates[i])
- gulp.src(entry[templates[i]])
- .pipe(webpack(webpackConf(entry, '../build/res/tpl'),null,function (err,status) {
- //console.log('webpack end')
- }))
- .pipe(gulpif(isUglify, uglify(uglifyConf)))
- .pipe(replace('!function','module.exports=(function'))
- .pipe(replace('(0)}([function','(0)})([function'))
- //lang
- .pipe(replace('src="./assets/','src="'+absPath+'/stage/index/assets/'))
- .pipe(replace('src="./../../stage/','src="'+absPath+'/stage/'))
- .pipe(replace('src="assets/','src="'+absPath+'/stage/index/assets/'))
- .pipe(gulp.dest(path.join(basePath, 'build/res/tpl/')))
- }
- })
- //编译任务
- gulp.task('compile', function(){
- for (var i = 0; i < stages.length; i++) {
- var entry = {};
- entry['index'] = path.join(basePath, 'src/'+process.env.C_PATH+'/' + stages[i] + '/index.js')
- gulp.src(entry['index'])
- .pipe(webpack(webpackConf(entry, ''),null,function (err,status) {
- //console.log('webpack end')
- }))
- //lang
- .pipe(replace('src="./assets/','src="'+absPath+'/stage/index/assets/'))
- .pipe(replace('src="./../../stage/','src="'+absPath+'/stage/'))
- .pipe(replace('src="assets/','src="'+absPath+'/stage/index/assets/'))
- .pipe(gulp.dest(path.join(basePath, 'build/'+process.env.C_PATH+'/' + stages[i] + '/')))
- .pipe(uglify(uglifyConf))
- .pipe(rename({
- suffix: '.min'
- }))
- .pipe(gulp.dest(path.join(basePath, 'build/'+process.env.C_PATH+'/' + stages[i] + '/')))
- gulp.src(path.join(basePath, 'src/'+process.env.C_PATH+'/' + stages[i] + '/index.less'))
- .pipe(less())
- //lang
- .pipe(replace('assets/',''+absPath+'/stage/index/assets/'))
- .pipe(gulp.dest(path.join(basePath, 'build/'+process.env.C_PATH+'/') + stages[i]))
- .pipe(minifyCss({
- compatibility: '-units.ch,-units.in,-units.pc,-units.pt,-units.vh,-units.vm,-units.vmax,-units.vmin'
- }))
- .pipe(rename({
- suffix: '.min'
- }))
- .pipe(footer('/*# sourceMappingURL=index.css.map */'))
- .pipe(gulp.dest(path.join(basePath, 'build/'+process.env.C_PATH+'/') + stages[i]));
- gutil.log(gutil.colors.green('Build less: '+path.join(basePath, 'src/'+process.env.C_PATH+'/' + stages[i] + '/index.less')));
- }
- })
- gulp.task('copy', function(){
- gulp.src(path.join(basePath, 'src/'+process.env.C_PATH+'/**/*.html'))
- .pipe(replace('src="../../lib/','src="'+absPath+'/lib/'))
- .pipe(replace('./index.css?t=',''+absPath+'/stage/index/index.css?t='))
- .pipe(replace('./index.js?t=',''+absPath+'/stage/index/index.js?t='))
- .pipe(gulp.dest(path.join(basePath, 'build/'+process.env.C_PATH+'')));
- gutil.log(gutil.colors.green('Copy libs: build/'+process.env.C_PATH+'/**/*.html'));
- gulp.src(path.join(basePath, 'src/'+process.env.C_PATH+'/**/assets/**/*'))
- .pipe(gulp.dest(path.join(basePath, 'build/'+process.env.C_PATH+'/')));
- gutil.log(gutil.colors.green('Copy libs: build/'+process.env.C_PATH+'/**/assets'));
- gulp.src(path.join(basePath, 'src/lib/**/*'))
- .pipe(gulp.dest(path.join(basePath, 'build/lib')));
- gutil.log(gutil.colors.green('Copy libs: build/lib'));
- gulp.src(path.join(basePath, 'src/res/**/*'))
- //lang
- .pipe(replace('src="./assets/','src="'+absPath+'/stage/index/assets/'))
- .pipe(replace('src="./../../stage/','src="'+absPath+'/stage/'))
- .pipe(replace('src="assets/','src="'+absPath+'/stage/index/assets/'))
- .pipe(gulp.dest(path.join(basePath, 'build/res/')));
- gutil.log(gutil.colors.green('Copy res: build/res/values'));
- // gulp.src(path.join(basePath, 'src/res/img/**/*'))
- // .pipe(gulp.dest(path.join(basePath, 'build/res/img/')));
- // gutil.log(gutil.colors.green('Copy res: build/res/img'));
- gulp.src(path.join(basePath, 'src/service/**/*'))
- .pipe(gulp.dest(path.join(basePath, 'build/service/')));
- gutil.log(gutil.colors.green('Copy service: build/service'));
- })
- gulp.task('default', function() {
- //console.log(path.join(basePath, 'src/**/*'))
- var watcherJsLess = gulp.watch(path.join(basePath, 'src/**/*.{js,less,css}'),['compile'])
- var watcherTemplate = gulp.watch(path.join(basePath, 'src/**/*.{tpl,jade,ejs,juicer}'),['compile'])
- var watcherRes = gulp.watch(path.join(basePath, 'src/**/*'),['copy'])
- watcherRes.on('change', function(event) {
- gutil.log(gutil.colors.yellow('File ' + event.path + ' was ' + event.type));
- });
- });
- // 启动server
- gulp.task('server', function() {
- gulp.src(path.join(basePath, 'build/'))
- .pipe(webserver({
- path: '/' + pkg.name + '/' + pkg.version + '/',
- host: '0.0.0.0',
- port: port,
- livereload: true,
- directoryListing: {
- enable: true,
- path: path.join(basePath, 'build/')
- },
- middleware: function(req, res, next) {
- gutil.log('Request received: ' + req.url);
- next();
- }
- }));
- gutil.log(gutil.colors.green('http://127.0.0.1'+(parseInt(port) == 80 ? '' : ':'+port)+'/' + pkg.name + '/' + pkg.version + '/'));
- if(serverWatch){
- var watcherJsLess = gulp.watch(path.join(basePath, 'src/**/*.{js,less,css}'),['compile'])
- var watcherTemplate = gulp.watch(path.join(basePath, 'src/**/*.{tpl,jade,ejs,juicer}'),['compile'])
- var watcherRes = gulp.watch(path.join(basePath, 'src/**/*'),['copy'])
- watcherRes.on('change', function(event) {
- gutil.log(gutil.colors.yellow('File ' + event.path + ' was ' + event.type));
- });
- }
- });
- //service-worker编译任务
- gulp.task('sw-compile', function(){
- for (var i = 0; i < stages.length; i++) {
- var entry = {};
- entry[stages[i]] = path.join(basePath, 'src/'+process.env.C_PATH+'/' + stages[i] + '/service-worker/index.js')
- if(fs.existsSync(entry[stages[i]])){
- gulp.src(entry[stages[i]])
- .pipe(webpack(webpackConf(entry, 'service-worker/'),null,function (err,status) {
- //console.log('webpack end')
- }))
- .pipe(gulp.dest(path.join(basePath, 'build/'+process.env.C_PATH+'/' + stages[i] + '/service-worker/')))
- }
- }
- })
- // 编译打包cyclone本地app
- gulp.task('cyclone', function() {
- var cssSrc = [path.join(basePath, 'src/'+process.env.C_PATH+'/**/*.{less,css}')];
- var jsSrc = [path.join(basePath, 'src/**/*.js'), '!' + path.join(basePath, 'src/lib/**/*'), '!' + path.join(basePath, 'src/service/**/*.js')];
- // var copySrc = [
- // path.join(basePath, 'src/*'),
- // path.join(basePath, 'src/'+process.env.C_PATH+'/**/assets/**/*'),
- // path.join(basePath, 'src/'+process.env.C_PATH+'/**/*.html'),
- // path.join(basePath, 'src/res/**/*'),
- // path.join(basePath, 'src/lib/**/*'),
- // path.join(basePath, 'src/manifest.json'),
- // path.join(basePath, 'src/service/**/*.js'),
- // path.join(basePath, 'src/util/**/*'),
- // path.join(basePath, 'src/component/**/*'),
- // path.join(basePath, 'src/node_modules/**/*')
- // ];
- // var copyDest = [
- // path.join(basePath, 'buildLocal/'),
- // path.join(basePath, 'buildLocal/'+process.env.C_PATH+'/'),
- // path.join(basePath, 'buildLocal/'+process.env.C_PATH+'/'),
- // path.join(basePath, 'buildLocal/res/'),
- // path.join(basePath, 'buildLocal/lib/'),
- // path.join(basePath, 'buildLocal/'),
- // path.join(basePath, 'buildLocal/service/'),
- // path.join(basePath, 'buildLocal/util/'),
- // path.join(basePath, 'buildLocal/component/'),
- // path.join(basePath, 'buildLocal/node_modules/')
- // ];
- //for (var i = 0; i < copySrc.length; i++) {
- gulp.src(path.join(basePath, 'src/manifest.json'))
- .pipe(gulp.dest(path.join(basePath, 'buildLocal/')))
- gulp.src(path.join(basePath, 'src/**/*'))
- .pipe(gulp.dest(path.join(basePath, 'buildLocal/')))
- .on('end',function(){
- gulp.src(cssSrc)
- .pipe(less())
- .pipe(minifyCss())
- .pipe(gulp.dest(path.join(basePath, 'buildLocal/'+process.env.C_PATH)))
- gulp.src(jsSrc)
- .pipe(babel({
- presets: [es2015]
- }))
- .pipe(replace(/((\.tpl)|(\.jade)|(\.juicer)|(\.ejs))[\'\"]\)/g,'$1.js\'\)'))
- .pipe(gulpif(isUglify, uglify(uglifyConf)))
- .pipe(gulp.dest(path.join(basePath, 'buildLocal/')));
- for (var i = 0; i < templates.length; i++) {
- var entry = {};
- entry[templates[i]] = path.join(basePath, 'src/res/tpl/' + templates[i])
- gulp.src(entry[templates[i]])
- .pipe(webpack(webpackConf(entry, '../buildLocal/res/tpl'),null,function (err,status) {
- //console.log('webpack end')
- }))
- .pipe(uglify(uglifyConf))
- .pipe(replace('!function','module.exports=(function'))
- .pipe(replace('(0)}([function','(0)})([function'))
- .pipe(gulp.dest(path.join(basePath, 'buildLocal/res/tpl/')))
- }
- })
- //}
- });
|