gulpfile.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. var gulp = require('gulp'),
  2. //var deleted = require('gulp-deleted');
  3. del = require('del'),
  4. uglify = require('gulp-uglify'),
  5. rename = require('gulp-rename'),
  6. changed = require('gulp-changed'),
  7. gulpif = require('gulp-if'),
  8. minimist = require('minimist'),
  9. ftp = require('gulp-ftp'),
  10. sftp = require('gulp-sftp'),
  11. JSFtp = require('jsftp'),
  12. gutil = require('gulp-util'),
  13. fs = require("fs");
  14. var apps = [
  15. {"folder": "o2_lib", "tasks": ["move", "clean"]},
  16. {"folder": "o2_core", "tasks": ["move", "min", "clean", "watch"]},
  17. {"folder": "x_desktop", "tasks": ["move", "min", "clean", "watch"]},
  18. {"folder": "x_component_Common", "tasks": ["move", "min", "clean", "watch"]},
  19. {"folder": "x_component_Template", "tasks": ["move", "min", "clean", "watch"]},
  20. {"folder": "x_component_AppCenter", "tasks": ["move", "min", "clean", "watch"]},
  21. {"folder": "x_component_AppMarket", "tasks": ["move", "min", "clean", "watch"]},
  22. {"folder": "x_component_Attendance", "tasks": ["move", "min", "clean", "watch"]},
  23. {"folder": "x_component_BAM", "tasks": ["move", "min", "clean", "watch"]},
  24. {"folder": "x_component_Calendar", "tasks": ["move", "min", "clean", "watch"]},
  25. {"folder": "x_component_Chat", "tasks": ["move", "min", "clean", "watch"]},
  26. {"folder": "x_component_cms_Column", "tasks": ["move", "min", "clean", "watch"]},
  27. {"folder": "x_component_cms_ColumnManager", "tasks": ["move", "min", "clean", "watch"]},
  28. {"folder": "x_component_cms_DictionaryDesigner", "tasks": ["move", "min", "clean", "watch"]},
  29. {"folder": "x_component_cms_Document", "tasks": ["move", "min", "clean", "watch"]},
  30. {"folder": "x_component_cms_FormDesigner", "tasks": ["move", "min", "clean", "watch"]},
  31. {"folder": "x_component_cms_Index", "tasks": ["move", "min", "clean", "watch"]},
  32. {"folder": "x_component_cms_Module", "tasks": ["move", "min", "clean", "watch"]},
  33. {"folder": "x_component_cms_QueryViewDesigner", "tasks": ["move", "min", "clean", "watch"]},
  34. {"folder": "x_component_cms_ScriptDesigner", "tasks": ["move", "min", "clean", "watch"]},
  35. {"folder": "x_component_cms_ViewDesigner", "tasks": ["move", "min", "clean", "watch"]},
  36. {"folder": "x_component_cms_Xform", "tasks": ["move", "min", "clean", "watch"]},
  37. {"folder": "x_component_Collect", "tasks": ["move", "min", "clean", "watch"]},
  38. {"folder": "x_component_Console", "tasks": ["move", "min", "clean", "watch"]},
  39. {"folder": "x_component_ControlPanel", "tasks": ["move", "min", "clean", "watch"]},
  40. {"folder": "x_component_CRM", "tasks": ["move", "min", "clean", "watch"]},
  41. {"folder": "x_component_Deployment", "tasks": ["move", "min", "clean", "watch"]},
  42. {"folder": "x_component_DesignCenter", "tasks": ["move", "min", "clean", "watch"]},
  43. {"folder": "x_component_Empty", "tasks": ["move", "min", "clean", "watch"]},
  44. {"folder": "x_component_Execution", "tasks": ["move", "min", "clean", "watch"]},
  45. {"folder": "x_component_ExeManager", "tasks": ["move", "min", "clean", "watch"]},
  46. {"folder": "x_component_FaceSet", "tasks": ["move", "min", "clean", "watch"]},
  47. {"folder": "x_component_File", "tasks": ["move", "min", "clean", "watch"]},
  48. {"folder": "x_component_Forum", "tasks": ["move", "min", "clean", "watch"]},
  49. {"folder": "x_component_ForumCategory", "tasks": ["move", "min", "clean", "watch"]},
  50. {"folder": "x_component_ForumDocument", "tasks": ["move", "min", "clean", "watch"]},
  51. {"folder": "x_component_ForumPerson", "tasks": ["move", "min", "clean", "watch"]},
  52. {"folder": "x_component_ForumSearch", "tasks": ["move", "min", "clean", "watch"]},
  53. {"folder": "x_component_ForumSection", "tasks": ["move", "min", "clean", "watch"]},
  54. {"folder": "x_component_HotArticle", "tasks": ["move", "min", "clean", "watch"]},
  55. {"folder": "x_component_IM", "tasks": ["move", "min", "clean", "watch"]},
  56. {"folder": "x_component_LogViewer", "tasks": ["move", "min", "clean", "watch"]},
  57. {"folder": "x_component_Meeting", "tasks": ["move", "min", "clean", "watch"]},
  58. {"folder": "x_component_Message", "tasks": ["move", "min", "clean", "watch"]},
  59. {"folder": "x_component_Minder", "tasks": ["move", "min", "clean", "watch"]},
  60. {"folder": "x_component_MinderEditor", "tasks": ["move", "min", "clean", "watch"]},
  61. {"folder": "x_component_Note", "tasks": ["move", "min", "clean", "watch"]},
  62. {"folder": "x_component_OKR", "tasks": ["move", "min", "clean", "watch"]},
  63. {"folder": "x_component_OnlineMeeting", "tasks": ["move", "min", "clean", "watch"]},
  64. {"folder": "x_component_OnlineMeetingRoom", "tasks": ["move", "min", "clean", "watch"]},
  65. {"folder": "x_component_Org", "tasks": ["move", "min", "clean", "watch"]},
  66. {"folder": "x_component_portal_PageDesigner", "tasks": ["move", "min", "clean", "watch"]},
  67. {"folder": "x_component_portal_Portal", "tasks": ["move", "min", "clean", "watch"]},
  68. {"folder": "x_component_portal_PortalExplorer", "tasks": ["move", "min", "clean", "watch"]},
  69. {"folder": "x_component_portal_PortalManager", "tasks": ["move", "min", "clean", "watch"]},
  70. {"folder": "x_component_portal_ScriptDesigner", "tasks": ["move", "min", "clean", "watch"]},
  71. {"folder": "x_component_portal_WidgetDesigner", "tasks": ["move", "min", "clean", "watch"]},
  72. {"folder": "x_component_process_Application", "tasks": ["move", "min", "clean", "watch"]},
  73. {"folder": "x_component_process_ApplicationExplorer", "tasks": ["move", "min", "clean", "watch"]},
  74. {"folder": "x_component_process_DictionaryDesigner", "tasks": ["move", "min", "clean", "watch"]},
  75. {"folder": "x_component_process_FormDesigner", "tasks": ["move", "min", "clean", "watch"]},
  76. {"folder": "x_component_process_ProcessDesigner", "tasks": ["move", "min", "clean", "watch"]},
  77. {"folder": "x_component_process_ProcessManager", "tasks": ["move", "min", "clean", "watch"]},
  78. {"folder": "x_component_process_ScriptDesigner", "tasks": ["move", "min", "clean", "watch"]},
  79. {"folder": "x_component_process_StatDesigner", "tasks": ["move", "min", "clean", "watch"]},
  80. {"folder": "x_component_process_TaskCenter", "tasks": ["move", "min", "clean", "watch"]},
  81. {"folder": "x_component_process_ViewDesigner", "tasks": ["move", "min", "clean", "watch"]},
  82. {"folder": "x_component_process_Work", "tasks": ["move", "min", "clean", "watch"]},
  83. {"folder": "x_component_process_Xform", "tasks": ["move", "min", "clean", "watch"]},
  84. {"folder": "x_component_Profile", "tasks": ["move", "min", "clean", "watch"]},
  85. {"folder": "x_component_query_Query", "tasks": ["move", "min", "clean", "watch"]},
  86. {"folder": "x_component_query_QueryExplorer", "tasks": ["move", "min", "clean", "watch"]},
  87. {"folder": "x_component_query_QueryManager", "tasks": ["move", "min", "clean", "watch"]},
  88. {"folder": "x_component_query_StatDesigner", "tasks": ["move", "min", "clean", "watch"]},
  89. {"folder": "x_component_query_ViewDesigner", "tasks": ["move", "min", "clean", "watch"]},
  90. {"folder": "x_component_Report", "tasks": ["move", "min", "clean", "watch"]},
  91. {"folder": "x_component_ReportDocument", "tasks": ["move", "min", "clean", "watch"]},
  92. {"folder": "x_component_ReportMinder", "tasks": ["move", "min", "clean", "watch"]},
  93. {"folder": "x_component_ScriptEditor", "tasks": ["move", "min", "clean", "watch"]},
  94. {"folder": "x_component_Search", "tasks": ["move", "min", "clean", "watch"]},
  95. {"folder": "x_component_SelecterTest", "tasks": ["move", "min", "clean", "watch"]},
  96. {"folder": "x_component_Selector", "tasks": ["move", "min", "clean", "watch"]},
  97. {"folder": "x_component_service_AgentDesigner", "tasks": ["move", "min", "clean", "watch"]},
  98. {"folder": "x_component_service_InvokeDesigner", "tasks": ["move", "min", "clean", "watch"]},
  99. {"folder": "x_component_service_ServiceManager", "tasks": ["move", "min", "clean", "watch"]},
  100. {"folder": "x_component_Setting", "tasks": ["move", "min", "clean", "watch"]},
  101. {"folder": "x_component_Strategy", "tasks": ["move", "min", "clean", "watch"]},
  102. {"folder": "x_component_Weixin", "tasks": ["move", "min", "clean", "watch"]},
  103. ];
  104. var sourcePrefix = '../o2web/';
  105. var destDir = 'target/o2server/servers/webServer/';
  106. var uploadOptions = {
  107. 'location': 'E:/o2server/servers/webServer/',
  108. 'host': '',
  109. 'user': '',
  110. 'pass': '',
  111. "remotePath": "/"
  112. };
  113. var options = minimist(process.argv.slice(2), {//upload: local ftp or sftp
  114. string: ["upload", "location", "host", "user", "pass", "port", "remotePath"]
  115. });
  116. options.upload = options.upload || "";
  117. options.location = options.location || uploadOptions.location;
  118. options.host = options.host || uploadOptions.host;
  119. options.user = options.user || uploadOptions.user;
  120. options.pass = options.pass || uploadOptions.pass;
  121. options.port = options.port || 0;
  122. options.remotePath = options.remotePath || uploadOptions.remotePath;
  123. var minTasks = [];
  124. var moveTasks = [];
  125. var watchTasks = [];
  126. var cleanTasks = [];
  127. function getMinTask(path){
  128. return function(){
  129. var src = sourcePrefix+'source/'+path+'/**/*.js';
  130. var dest = destDir+path+'/';
  131. return gulp.src(src)
  132. .pipe(changed(dest))
  133. .pipe(uglify())
  134. .pipe(rename({ extname: '.min.js' }))
  135. .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+path+'/')))
  136. .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
  137. host: options.host,
  138. user: options.user || 'anonymous',
  139. pass: options.pass || '@anonymous',
  140. port: options.port || 21,
  141. remotePath: (options.remotePath || '/')+path
  142. })))
  143. .pipe(gulpif((options.upload=='sftp'&&options.host!=''), ftp({
  144. host: options.host,
  145. user: options.user || 'anonymous',
  146. pass: options.pass || null,
  147. port: options.port || 22,
  148. remotePath: (options.remotePath || '/')+path
  149. })))
  150. .pipe(gulp.dest(dest))
  151. .pipe(gutil.noop());
  152. }
  153. }
  154. function getMoveTask(path){
  155. return function(){
  156. var src = sourcePrefix+'source/'+path+'/**/*';
  157. var dest = destDir+path+'/';
  158. return gulp.src(src)
  159. .pipe(changed(dest))
  160. .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+path+'/')))
  161. .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
  162. host: options.host,
  163. user: options.user || 'anonymous',
  164. pass: options.pass || '@anonymous',
  165. port: options.port || 21,
  166. remotePath: (options.remotePath || '/')+path
  167. })))
  168. .pipe(gulpif((options.upload=='sftp'&&options.host!=''), ftp({
  169. host: options.host,
  170. user: options.user || 'anonymous',
  171. pass: options.pass || null,
  172. port: options.port || 22,
  173. remotePath: (options.remotePath || '/')+path
  174. })))
  175. .pipe(gulp.dest(dest))
  176. .pipe(gutil.noop());
  177. }
  178. }
  179. function getCleanTask(path){
  180. return function(cb){
  181. var dest = destDir+path+'/';
  182. del(dest, cb);
  183. }
  184. }
  185. function cleanRemoteFtp(f, cb){
  186. var file = options.remotePath+f;
  187. var ftp = new JSFtp({
  188. host: options.host,
  189. user: options.user || 'anonymous',
  190. pass: options.pass || null,
  191. port: options.port || 21
  192. });
  193. ftp.raw('dele '+file, function(err) {
  194. if (err){ cb(); return; }
  195. if (file.substring(file.length-3).toLowerCase()==".js"){
  196. file = file.replace('.js', ".min.js");
  197. ftp.raw('dele '+file, function(err) {
  198. if (err){ cb(); return; }
  199. if (file.indexOf("/")!=-1){
  200. var p = file.substring(0, file.lastIndexOf("/"));
  201. ftp.raw('rmd '+p, function(err) {
  202. if (err){ cb(); return; }
  203. ftp.raw.quit();
  204. cb();
  205. });
  206. }
  207. });
  208. }else{
  209. if (file.indexOf("/")!=-1){
  210. var pPath = file.substring(0, file.lastIndexOf("/"));
  211. ftp.raw('rmd '+pPath, function(err) {
  212. if (err){ cb(); return; }
  213. ftp.raw.quit();
  214. cb();
  215. });
  216. }
  217. }
  218. });
  219. }
  220. function cleanRemoteLocal(f, cb){
  221. var file = options.location+f;
  222. del(file, {force: true, dryRun: true}, function(){
  223. if (file.substring(file.length-3).toLowerCase()==".js"){
  224. var minfile = file.replace('.js', ".min.js");
  225. del(minfile, {force: true, dryRun: true}, function(){
  226. var p = file.substring(0, file.lastIndexOf("/"));
  227. fs.rmdir(p,function(err){
  228. if(err){}
  229. cb();
  230. })
  231. });
  232. }else{
  233. var p = file.substring(0, file.lastIndexOf("/"));
  234. fs.rmdir(p,function(err){
  235. if(err){}
  236. cb();
  237. })
  238. }
  239. });
  240. }
  241. function getCleanRemoteTask(path){
  242. return function(cb){
  243. if (options.upload){
  244. var file = path.replace(/\\/g, "/");
  245. file = file.substring(file.indexOf("source/")+7);
  246. if (options.upload=='local'&&options.location!='') cleanRemoteLocal(file, cb);
  247. if (options.upload=='ftp'&&options.host!='') cleanRemoteFtp(file, cb);
  248. }else{
  249. if (cb) cb();
  250. }
  251. }
  252. }
  253. function getWatchTask(path, min){
  254. return function(cb){
  255. var moveTask = "move:"+path;
  256. var minTask = "min:"+path;
  257. var cleanTask = "clean:"+path;
  258. if (min) gulp.watch('source/'+path+'/**/*.js', {"events": ['add','change']}, gulp.parallel(minTask));
  259. gulp.watch('source/'+path+'/**/*', {"events": ['addDir', 'add','change']}, gulp.parallel(moveTask));
  260. // gulp.watch('source/'+path+'/**/*', {"events": ['unlinkDir']}, function(file){
  261. // console.log("into unlinkDir watch ......."+file);
  262. // });
  263. watcher = gulp.watch('source/'+path+'/**/*', {delay:500});
  264. watcher.on('unlink', function(file, stats){
  265. console.log("into unlink watch ......."+file);
  266. gulp.task("cleanRemote", getCleanRemoteTask(file))
  267. gulp.series(gulp.parallel(cleanTask, "cleanRemote"), gulp.parallel(minTask, moveTask))();
  268. });
  269. // watcher.on('unlinkDir', function(file, stats){
  270. // console.log("into unlinkDir watch ......."+file);
  271. // // gulp.task("cleanRemoteDir", getCleanRemoteTask(file))
  272. // // gulp.series(gulp.parallel(cleanTask, "cleanRemoteDir"), gulp.parallel(minTask, moveTask))();
  273. // });
  274. }
  275. }
  276. apps.map(function(app){
  277. var taskName = "";
  278. if (app.tasks.indexOf("min")!==-1){
  279. taskName = "min:"+app.folder;
  280. minTasks.push(taskName);
  281. gulp.task(taskName, getMinTask(app.folder));
  282. }
  283. if (app.tasks.indexOf("move")!==-1){
  284. taskName = "move:"+app.folder;
  285. moveTasks.push(taskName);
  286. gulp.task(taskName, getMoveTask(app.folder));
  287. }
  288. if (app.tasks.indexOf("clean")!==-1){
  289. taskName = "clean:"+app.folder;
  290. cleanTasks.push(taskName);
  291. gulp.task(taskName, getCleanTask(app.folder));
  292. }
  293. if (app.tasks.indexOf("watch")!==-1){
  294. taskName = "watch:"+app.folder;
  295. watchTasks.push(taskName);
  296. gulp.task(taskName, getWatchTask(app.folder, (app.tasks.indexOf("min")!==-1)));
  297. }
  298. if (app.tasks.indexOf("min")!==-1 && app.tasks.indexOf("move")!==-1){
  299. gulp.task(app.folder, gulp.parallel("min:"+app.folder, "move:"+app.folder));
  300. }else if (app.tasks.indexOf("min")==-1 && app.tasks.indexOf("move")!==-1){
  301. gulp.task(app.folder, gulp.parallel("move:"+app.folder));
  302. }else if (app.tasks.indexOf("min")!==-1 && app.tasks.indexOf("move")==-1){
  303. gulp.task(app.folder, gulp.parallel("min:"+app.folder));
  304. }
  305. })
  306. gulp.task("index", function(){
  307. var src = [sourcePrefix+'source/favicon.ico', sourcePrefix+'source/index.html'];
  308. return gulp.src(src)
  309. .pipe(changed(destDir))
  310. .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+'/')))
  311. .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
  312. host: options.host,
  313. user: options.user || 'anonymous',
  314. pass: options.pass || '@anonymous',
  315. port: options.port || 21,
  316. remotePath: (options.remotePath || '/')
  317. })))
  318. .pipe(gulpif((options.upload=='sftp'&&options.host!=''), ftp({
  319. host: options.host,
  320. user: options.user || 'anonymous',
  321. pass: options.pass || null,
  322. port: options.port || 22,
  323. remotePath: (options.remotePath || '/')
  324. })))
  325. .pipe(gulp.dest(destDir))
  326. .pipe(gutil.noop());
  327. });
  328. gulp.task("default", gulp.parallel(minTasks, moveTasks, "index"));
  329. gulp.task("clean", gulp.series(cleanTasks));
  330. gulp.task("sync", gulp.series(
  331. gulp.series(cleanTasks),
  332. gulp.parallel(minTasks, moveTasks, "index")
  333. ));
  334. gulp.task("watch", gulp.parallel(watchTasks));