Zhou Rui 5 лет назад
Родитель
Сommit
2d50afc2f6

+ 5 - 1
.gitignore

@@ -56,6 +56,7 @@ command.swap
 **/bin/
 /o2server/**/src/main/webapp/describe/
 **/target/
+/o2server/servers/
 #ignore folder
 version.o2
 /node_modules/
@@ -146,4 +147,7 @@ typings/
 .dynamodb/
 
 #vscode
-.factorypath
+.factorypath
+/o2server/commons/
+/o2server/jvm/
+/o2web/gulpconfig.js

+ 25 - 9
Jenkinsfile

@@ -1,21 +1,37 @@
 pipeline {
     agent {label '132'}
     stages {
-        stage('preperation') {
+        stage('Stop Server') {
             steps {
-                sh 'npm install'
-                sh 'npm run preperation:linux'
+                catchError(buildResult: 'SUCCESS') {
+                    sh 'target/o2server/stop_linux.sh'
+                }
             }
         }
-        stage('build server') {
+        stage('init') {
             steps {
-                sh 'id'
-                sh 'npm run build_server'
+                sh 'npm install'
+                sh 'npm run clear'
             }
         }
-        stage('build web') {
+        stage('dependency') {
             steps {
-                sh 'npm run build_web'
+                sh 'npm run preperation:linux'
+            }
+        }
+        stage('build') {
+            parallel {
+                stage('build server') {
+                    steps {
+                        sh 'id'
+                        sh 'npm run build_server'
+                    }
+                }
+                stage('build web') {
+                    steps {
+                        sh 'npm run build_web'
+                    }
+                }
             }
         }
         stage('deploy') {
@@ -26,7 +42,7 @@ pipeline {
         }
         stage('run') {
             steps {
-                sh '/target/o2server/start_linux.sh'
+                sh 'JENKINS_NODE_COOKIE=dontKillMe nohup target/o2server/start_linux.sh > nohup.out &'
             }
         }
     }

+ 95 - 156
gulpfile.js

@@ -1,5 +1,6 @@
 var gulp = require('gulp'),
     gutil = require('gulp-util'),
+    del = require('del'),
     fs = require("fs"),
     minimist = require('minimist'),
     targz = require('targz'),
@@ -7,7 +8,13 @@ var gulp = require('gulp'),
     dateFormat = require('dateformat'),
     progress = require('progress-stream'),
     request = require("request"),
+    uglify = require('gulp-tm-uglify'),
+    rename = require('gulp-rename'),
+    changed = require('gulp-changed'),
+    gulpif = require('gulp-if'),
     http = require('http');
+var fg = require('fast-glob');
+var logger = require('gulp-logger');
 
 //var downloadHost = "download.o2oa.net";
 var downloadHost = "release.o2oa.net";
@@ -66,11 +73,13 @@ function ProgressBar(description, bar_length){
         for (var i=0;i<cell_num;i++) { cell += '>'; }
 
         var empty = '';
-        for (var i=0;i<this.length-cell_num;i++) { empty += '-'; }
+        for (var i=0;i<this.length-cell_num;i++) { empty += '='; }
 
-        var d = new Date();
-        var cmdText = "["+dateFormat(d, "HH:MM:ss")+"]"+" "+this.description + ': ' + cell + empty + ' ' + (100*percent).toFixed(2) + '% '+speed+count;
-        slog(cmdText);
+        if (opts.completed <= opts.total){
+            var d = new Date();
+            var cmdText = "["+dateFormat(d, "HH:MM:ss")+"]"+" "+this.description + ': ' + cell + empty + ' ' + (100*percent).toFixed(2) + '% '+speed+count;
+            slog(cmdText);
+        }
     };
 }
 
@@ -149,6 +158,9 @@ function initProgress(){
 
 function download_commons_and_jvm(cb){
     gutil.log(gutil.colors.green("begin download commons and jvm"));
+    console.log(`---------------------------------------------------------------------
+  . Start to download the dependencies needed for compilation ...
+---------------------------------------------------------------------`);
     var downloader = new Promise((resolve, reject) => {
         var commonLoaded = false;
         var jvmLoaded = false;
@@ -177,13 +189,16 @@ function download_commons_and_jvm(cb){
         });
     });
     downloader.then(()=>{
-        console.log();
+        //console.log();
         gutil.log(gutil.colors.green("download commons and jvm completed"));
         cb();
     });
 }
 
 function decompress_commons_and_jvm(cb){
+    console.log(`---------------------------------------------------------------------
+  . Start to decompress the dependencies needed for compilation ...
+---------------------------------------------------------------------`);
     gutil.log(gutil.colors.green("begin decompress commons and jvm"));
     var count =0;
     var decompressor = new Promise((resolve, reject) => {
@@ -231,173 +246,97 @@ function decompress_commons_and_jvm(cb){
     });
 }
 
-function getFileCount(p){
-    var fileCount = 0;
-    function readFile(path,filesList, ){
-        files = fs.readdirSync(path);
-        files.forEach(walk);
-        function walk(file){
-            states = fs.statSync(path+'/'+file);
-            if(states.isDirectory()){
-                readFile(path+'/'+file,filesList);
-            }else{
-                // fileCount+=states.size;
-                fileCount++;
-            }
-        }
-    }
-    var filesList = [];
-    readFile(p, filesList);
-    return fileCount;
-}
+function build_web_minimize(cb) {
+    console.log(`---------------------------------------------------------------------
+  . Start compiling the web ...
+---------------------------------------------------------------------`);
 
+    var dest = 'target/o2server/servers/webServer/';
+    var src_min = ['o2web/source/**/*.js', '!**/*.spec.js', '!**/test/**', '!o2web/source/o2_lib/**/*'];
 
-function deploy_web(){
-    var path = "o2server/servers/"
-    var fileCount = getFileCount(path);
+    var entries = fg.sync(src_min, { dot: false});
+    var size = entries.length;
 
-    //console.log(fileCount);
     var pb = new ProgressBar('', 50);
-    var progressStream = progress({
-        length: fileCount,
-        time: 100,
-        objectMode: true
-    });
-    progressStream.on('progress', function (stats) {
-        var n = (fileCount*stats.percentage/100).toFixed(0);
-        if (n>fileCount) n = fileCount;
-        pb.render({ completed: n, total: fileCount, count: n});
-    });
+    var doCount = 0;
 
-    var source = "o2server/servers/**/*";
-    var dest = "target/o2server/servers/"
-    return gulp.src(source)
-        .pipe(progressStream)
-        .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
-}
-function deploy_server_store(){
-    var path = "o2server/store/"
-    var fileCount = getFileCount(path);
-
-    var pb = new ProgressBar('total: '+fileCount, 50);
-    var progressStream = progress({
-        length: fileCount,
-        time: 100,
-        objectMode: true
-    });
-    progressStream.on('progress', function (stats) {
-        var n = (fileCount*stats.percentage/100).toFixed(0);
-        if (n>fileCount) n = fileCount;
-        pb.render({ completed: n, total: fileCount, count: n});
-    });
+    var stream = gulp.src(src_min);
+    stream.on("end", ()=>{console.log();});
 
-    var source = "o2server/store/**/*";
-    var dest = "target/o2server/store/"
-    return gulp.src(source)
-        .pipe(progressStream)
+    return stream.pipe(uglify())
+        .pipe(rename({ extname: '.min.js' }))
         .pipe(gulp.dest(dest))
+        .pipe(logger(function(){
+            doCount++;
+            if (doCount <= size){pb.render({ completed: doCount, total: size, count: doCount})};
+        }))
         .pipe(gutil.noop());
 }
-function deploy_server_commons(){
-    var path = "o2server/commons/"
-    var fileCount = getFileCount(path);
-
-    var pb = new ProgressBar('total: '+fileCount, 50);
-    var progressStream = progress({
-        length: fileCount,
-        time: 100,
-        objectMode: true
-    });
-    progressStream.on('progress', function (stats) {
-        var n = (fileCount*stats.percentage/100).toFixed(0);
-        if (n>fileCount) n = fileCount;
-        pb.render({ completed: n, total: fileCount, count: n});
-    });
 
-    var source = "o2server/commons/**/*";
-    var dest = "target/o2server/commons/"
-    return gulp.src(source)
-        .pipe(progressStream)
-        .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
-}
-function deploy_server_jvm(){
-    var path = "o2server/jvm/"
-    var fileCount = getFileCount(path);
-
-    var pb = new ProgressBar('total: '+fileCount, 50);
-    var progressStream = progress({
-        length: fileCount,
-        time: 100,
-        objectMode: true
-    });
-    progressStream.on('progress', function (stats) {
-        var n = (fileCount*stats.percentage/100).toFixed(0);
-        if (n>fileCount) n = fileCount;
-        pb.render({ completed: n, total: fileCount, count: n});
-    });
+function build_web_move() {
+    var dest = 'target/o2server/servers/webServer/';
+    var src_move = ['o2web/source/**/*', '!**/*.spec.js', '!**/test/**'];
 
-    var source = "o2server/jvm/**/*";
-    var dest = "target/o2server/jvm/"
-    return gulp.src(source)
-        .pipe(progressStream)
-        .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
-}
-function deploy_server_config(){
-    var path = "o2server/configSample/"
-    var fileCount = getFileCount(path);
-
-    var pb = new ProgressBar('total: '+fileCount, 50);
-    var progressStream = progress({
-        length: fileCount,
-        time: 100,
-        objectMode: true
-    });
-    progressStream.on('progress', function (stats) {
-        var n = (fileCount*stats.percentage/100).toFixed(0);
-        if (n>fileCount) n = fileCount;
-        pb.render({ completed: n, total: fileCount, count: n});
-    });
+    var entries = fg.sync(src_move, { dot: false});
+    var size = entries.length;
+    var pb = new ProgressBar('', 50);
+    var doCount = 0;
 
-    var source = "o2server/configSample/**/*";
-    var dest = "target/o2server/configSample/"
-    return gulp.src(source)
-        .pipe(progressStream)
-        .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
-}
-function deploy_server_local(){
-    var path = "o2server/localSample/"
-    var fileCount = getFileCount(path);
-
-    var pb = new ProgressBar('total: '+fileCount, 50);
-    var progressStream = progress({
-        length: fileCount,
-        time: 100,
-        objectMode: true
-    });
-    progressStream.on('progress', function (stats) {
-        var n = (fileCount*stats.percentage/100).toFixed(0);
-        if (n>fileCount) n = fileCount;
-        pb.render({ completed: n, total: fileCount, count: n});
-    });
+    var stream = gulp.src(src_move);
+    stream.on("end", ()=>{console.log();});
 
-    var source = "o2server/localSample/**/*";
-    var dest = "target/o2server/localSample/"
-    return gulp.src(source)
-        .pipe(progressStream)
-        .pipe(gulp.dest(dest))
+    return stream.pipe(gulp.dest(dest))
+        .pipe(logger(function(){
+            doCount++;
+            if (doCount <= size) {pb.render({ completed: doCount, total: size, count: doCount})};
+        }))
         .pipe(gutil.noop());
 }
-function deploy_server_script(){
+exports.build_web_move = build_web_move;
+
+function clear_build(cb){
+    console.log(`---------------------------------------------------------------------
+  . clear old build ...
+---------------------------------------------------------------------`);
+    var dest = 'target';
+    del(dest, { force: true });
+    cb();
+}
+exports.clear_build = clear_build;
+
+
+function deploy_server(){
+    console.log(`---------------------------------------------------------------------
+  . deploy to target ...
+---------------------------------------------------------------------`);
+    var source = ["o2server/*store/**/*", "o2server/*commons/**/*", "o2server/*jvm/**/*", "o2server/*configSample/**/*", "o2server/*localSample/**/*"];
+    source = source.concat(scriptSource);
+    console.log(source)
     var dest = "target/o2server/"
-    return gulp.src(scriptSource)
-        .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
+
+    var entries = fg.sync(source, { dot: false});
+    var size = entries.length;
+    var pb = new ProgressBar('', 50);
+    var doCount = 0;
+
+    var stream = gulp.src(source);
+    stream.on("end", ()=>{console.log();});
+
+    return stream.pipe(gulp.dest(dest))
+        .pipe(logger(function(){
+            doCount++;
+            if (doCount <= size) {pb.render({ completed: doCount, total: size, count: doCount})};
+        }));
 }
 
+exports.preperation =  gulp.series(download_commons_and_jvm, decompress_commons_and_jvm);
 
-exports.preperation = gulp.series(download_commons_and_jvm, decompress_commons_and_jvm,);
-exports.deploy = gulp.series(deploy_web, deploy_server_store, deploy_server_commons, deploy_server_jvm, deploy_server_config, deploy_server_local, deploy_server_script);
+var shell = require('gulp-shell')
+exports.build_server = function(){
+    console.log(`---------------------------------------------------------------------
+  . Start compiling the server ...
+---------------------------------------------------------------------`);
+    return (shell.task('npm run build_server_script'))();
+};
+exports.build_web = gulp.series(build_web_minimize, build_web_move);
+exports.deploy = deploy_server;

+ 0 - 436
o2server/gulpfile.js

@@ -1,436 +0,0 @@
-var gulp = require('gulp'),
-//var deleted = require('gulp-deleted');
-    del = require('del'),
-    uglify = require('gulp-tm-uglify'),
-    rename = require('gulp-rename'),
-    changed = require('gulp-changed'),
-    gulpif = require('gulp-if'),
-    minimist = require('minimist'),
-    ftp = require('gulp-ftp'),
-    sftp = require('gulp-sftp'),
-    JSFtp = require('jsftp'),
-    gutil = require('gulp-util'),
-    fs = require("fs");
-var assetRev = require('gulp-tm-asset-rev');
-
-var apps = [
-    {"folder": "o2_lib",                                    "tasks": ["move", "clean"]},
-    {"folder": "o2_core",                                   "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ANN",                           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_AppCenter",                     "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_AppMarket",                     "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Attendance",                    "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_BAM",                           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Calendar",                      "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Chat",                          "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_Column",                    "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_ColumnManager",             "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_DictionaryDesigner",        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_Document",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_FormDesigner",              "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_Index",                     "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_Module",                    "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_QueryViewDesigner",         "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_ScriptDesigner",            "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_ViewDesigner",              "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_cms_Xform",                     "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Collect",                       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Common",                        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Console",                       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ControlPanel",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_CRM",                           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Deployment",                    "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_DesignCenter",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Empty",                         "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Execution",                     "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ExeManager",                    "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_FaceSet",                       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_File",                          "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Forum",                         "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ForumCategory",                 "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ForumDocument",                 "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ForumPerson",                   "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ForumSearch",                   "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ForumSection",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Homepage",                      "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_HotArticle",                    "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_IM",                            "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_LogViewer",                     "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Meeting",                       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Message",                       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Minder",                        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_MinderEditor",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Note",                          "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_OKR",                           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_OnlineMeeting",                 "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_OnlineMeetingRoom",             "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Org",                           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_portal_PageDesigner",           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_portal_Portal",                 "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_portal_PortalExplorer",         "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_portal_PortalManager",          "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_portal_ScriptDesigner",         "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_portal_WidgetDesigner",         "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_Application",           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_ApplicationExplorer",   "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_DictionaryDesigner",    "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_FormDesigner",          "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_ProcessDesigner",       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_ProcessManager",        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_ScriptDesigner",        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_StatDesigner",          "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_TaskCenter",            "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_ViewDesigner",          "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_Work",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_process_Xform",                 "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Profile",                       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_query_Query",                   "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_query_QueryExplorer",           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_query_QueryManager",            "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_query_StatDesigner",            "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_query_ViewDesigner",            "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_query_TableDesigner",           "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_query_StatementDesigner",       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Report",                        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ReportDocument",                "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ReportMinder",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_ScriptEditor",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Search",                        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_SelecterTest",                  "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Selector",                      "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_service_AgentDesigner",         "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_service_InvokeDesigner",        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_service_ServiceManager",        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Setting",                       "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_SmartOfficeRoom",               "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Snake",                         "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Strategy",                      "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Template",                      "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Weixin",                        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_desktop",                                 "tasks": ["move", "min", "clean", "watch"]}
-];
-
-var sourcePrefix = '../o2web/';
-var destDir = 'servers/webServer/';
-
-var uploadOptions = {
-    'location': 'E:/o2server/servers/webServer/',
-    'host': '',
-    'user': '',
-    'pass': '',
-    "remotePath": "/"
-};
-var options = minimist(process.argv.slice(2), {//upload: local ftp or sftp
-    string: ["upload", "location", "host", "user", "pass", "port", "remotePath"]
-});
-options.upload = options.upload || "";
-options.location = options.location || uploadOptions.location;
-options.host = options.host || uploadOptions.host;
-options.user = options.user || uploadOptions.user;
-options.pass = options.pass || uploadOptions.pass;
-options.port = options.port || 0;
-options.remotePath = options.remotePath || uploadOptions.remotePath;
-
-
-var minTasks = [];
-var moveTasks = [];
-var watchTasks = [];
-var cleanTasks = [];
-
-function getMinTask(path){
-    return function(){
-        var src = sourcePrefix+'source/'+path+'/**/*.js';
-        var dest = destDir+path+'/';
-        return gulp.src(src)
-            .pipe(changed(dest))
-            .pipe(uglify())
-            .pipe(rename({ extname: '.min.js' }))
-            .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+path+'/')))
-            .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
-                host: options.host,
-                user: options.user || 'anonymous',
-                pass: options.pass || '@anonymous',
-                port: options.port || 21,
-                remotePath: (options.remotePath || '/')+path
-            })))
-            .pipe(gulpif((options.upload=='sftp'&&options.host!=''), ftp({
-                host: options.host,
-                user: options.user || 'anonymous',
-                pass: options.pass || null,
-                port: options.port || 22,
-                remotePath: (options.remotePath || '/')+path
-            })))
-            .pipe(gulp.dest(dest))
-            .pipe(gutil.noop());
-    }
-}
-function getMoveTask(path){
-    return function(){
-        var src = sourcePrefix+'source/'+path+'/**/*';
-        var dest = destDir+path+'/';
-        return gulp.src(src)
-            .pipe(changed(dest))
-            .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+path+'/')))
-            .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
-                host: options.host,
-                user: options.user || 'anonymous',
-                pass: options.pass || '@anonymous',
-                port: options.port || 21,
-                remotePath: (options.remotePath || '/')+path
-            })))
-            .pipe(gulpif((options.upload=='sftp'&&options.host!=''), ftp({
-                host: options.host,
-                user: options.user || 'anonymous',
-                pass: options.pass || null,
-                port: options.port || 22,
-                remotePath: (options.remotePath || '/')+path
-            })))
-            .pipe(gulp.dest(dest))
-            .pipe(gutil.noop());
-    }
-}
-
-function getCleanTask(path){
-    return function(cb){
-        var dest = destDir+path+'/';
-        del(dest, cb);
-    }
-}
-
-function cleanRemoteFtp(f, cb){
-    var file = options.remotePath+f;
-
-    var ftp = new JSFtp({
-        host: options.host,
-        user: options.user || 'anonymous',
-        pass: options.pass || null,
-        port: options.port || 21
-    });
-
-    ftp.raw('dele '+file, function(err) {
-        if (err){ cb(); return; }
-        if (file.substring(file.length-3).toLowerCase()==".js"){
-            file = file.replace('.js', ".min.js");
-            ftp.raw('dele '+file, function(err) {
-                if (err){ cb(); return; }
-
-                if (file.indexOf("/")!=-1){
-                    var p = file.substring(0, file.lastIndexOf("/"));
-                    ftp.raw('rmd '+p, function(err) {
-                        if (err){ cb(); return; }
-
-                        ftp.raw.quit();
-                        cb();
-                    });
-                }
-
-            });
-        }else{
-            if (file.indexOf("/")!=-1){
-                var pPath = file.substring(0, file.lastIndexOf("/"));
-                ftp.raw('rmd '+pPath, function(err) {
-                    if (err){ cb(); return; }
-                    ftp.raw.quit();
-                    cb();
-                });
-            }
-        }
-    });
-}
-function cleanRemoteLocal(f, cb){
-    var file = options.location+f;
-    del(file, {force: true, dryRun: true}, function(){
-        if (file.substring(file.length-3).toLowerCase()==".js"){
-            var minfile = file.replace('.js', ".min.js");
-            del(minfile, {force: true, dryRun: true}, function(){
-                var p = file.substring(0, file.lastIndexOf("/"));
-                fs.rmdir(p,function(err){
-                    if(err){}
-                    cb();
-                })
-            });
-        }else{
-            var p = file.substring(0, file.lastIndexOf("/"));
-            fs.rmdir(p,function(err){
-                if(err){}
-                cb();
-            })
-        }
-    });
-}
-
-function getCleanRemoteTask(path){
-    return function(cb){
-        if (options.upload){
-            var file = path.replace(/\\/g, "/");
-            file = file.substring(file.indexOf("source/")+7);
-
-            if (options.upload=='local'&&options.location!='') cleanRemoteLocal(file, cb);
-            if (options.upload=='ftp'&&options.host!='') cleanRemoteFtp(file, cb);
-        }else{
-            if (cb) cb();
-        }
-    }
-}
-function getWatchTask(path, min){
-    return function(cb){
-        var moveTask = "move:"+path;
-        var minTask = "min:"+path;
-        var cleanTask = "clean:"+path;
-        if (min) gulp.watch('source/'+path+'/**/*.js', {"events": ['add','change']}, gulp.parallel(minTask));
-        gulp.watch('source/'+path+'/**/*', {"events": ['addDir', 'add','change']},  gulp.parallel(moveTask));
-
-        // gulp.watch('source/'+path+'/**/*', {"events": ['unlinkDir']},  function(file){
-        //     console.log("into unlinkDir watch ......."+file);
-        // });
-
-
-        watcher = gulp.watch('source/'+path+'/**/*', {delay:500});
-        watcher.on('unlink', function(file, stats){
-            console.log("into unlink watch ......."+file);
-            gulp.task("cleanRemote", getCleanRemoteTask(file))
-            gulp.series(gulp.parallel(cleanTask, "cleanRemote"), gulp.parallel(minTask, moveTask))();
-        });
-        // watcher.on('unlinkDir', function(file, stats){
-        //     console.log("into unlinkDir watch ......."+file);
-        //     // gulp.task("cleanRemoteDir", getCleanRemoteTask(file))
-        //     // gulp.series(gulp.parallel(cleanTask, "cleanRemoteDir"), gulp.parallel(minTask, moveTask))();
-        // });
-    }
-}
-
-apps.map(function(app){
-    var taskName = "";
-    if (app.tasks.indexOf("min")!==-1){
-        taskName = "min:"+app.folder;
-        minTasks.push(taskName);
-        gulp.task(taskName, getMinTask(app.folder));
-    }
-    if (app.tasks.indexOf("move")!==-1){
-        taskName = "move:"+app.folder;
-        moveTasks.push(taskName);
-        gulp.task(taskName, getMoveTask(app.folder));
-    }
-    if (app.tasks.indexOf("clean")!==-1){
-        taskName = "clean:"+app.folder;
-        cleanTasks.push(taskName);
-        gulp.task(taskName, getCleanTask(app.folder));
-    }
-    if (app.tasks.indexOf("watch")!==-1){
-        taskName = "watch:"+app.folder;
-        watchTasks.push(taskName);
-        gulp.task(taskName, getWatchTask(app.folder, (app.tasks.indexOf("min")!==-1)));
-    }
-
-    if (app.tasks.indexOf("min")!==-1 && app.tasks.indexOf("move")!==-1){
-        gulp.task(app.folder, gulp.parallel("min:"+app.folder, "move:"+app.folder));
-    }else if (app.tasks.indexOf("min")==-1 && app.tasks.indexOf("move")!==-1){
-        gulp.task(app.folder, gulp.parallel("move:"+app.folder));
-    }else if (app.tasks.indexOf("min")!==-1 && app.tasks.indexOf("move")==-1){
-        gulp.task(app.folder, gulp.parallel("min:"+app.folder));
-    }
-
-
-})
-
-gulp.task("index", function(){
-	var src = [sourcePrefix+'source/favicon.ico', sourcePrefix+'source/index.html'];
-	return gulp.src(src)
-			.pipe(changed(destDir))
-            .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+'/')))
-            .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
-                host: options.host,
-                user: options.user || 'anonymous',
-                pass: options.pass || '@anonymous',
-                port: options.port || 21,
-                remotePath: (options.remotePath || '/')
-            })))
-            .pipe(gulpif((options.upload=='sftp'&&options.host!=''), ftp({
-                host: options.host,
-                user: options.user || 'anonymous',
-                pass: options.pass || null,
-                port: options.port || 22,
-                remotePath: (options.remotePath || '/')
-            })))
-            .pipe(gulp.dest(destDir))
-            .pipe(gutil.noop());
-});
-
-//gulp.task("default", gulp.parallel(minTasks, moveTasks, "index"));
-gulp.task("clean", gulp.series(cleanTasks));
-gulp.task("sync", gulp.series(
-    gulp.series(cleanTasks),
-    gulp.parallel(minTasks, moveTasks, "index")
-));
-gulp.task("watch", gulp.parallel(watchTasks));
-
-gulp.task("o2:new-v:html", function () {
-    var path = "x_desktop";
-    var src = sourcePrefix+'source/'+path+'/*.html';
-    var dest = destDir+'x_desktop/';
-    return gulp.src(src)
-        .pipe(assetRev())
-        .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+path+'/')))
-        .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
-            host: options.host,
-            user: options.user || 'anonymous',
-            pass: options.pass || '@anonymous',
-            port: options.port || 21,
-            remotePath: (options.remotePath || '/')+path
-        })))
-        .pipe(gulpif((options.upload=='sftp'&&options.host!=''), sftp({
-            host: options.host,
-            user: options.user || 'anonymous',
-            pass: options.pass || null,
-            port: options.port || 22,
-            remotePath: (options.remotePath || '/')+path
-        })))
-        .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
-
-});
-gulp.task("o2:new-v:o2", function () {
-    var path = "o2_core";
-    var src = sourcePrefix+'source/'+path+'/o2.js';
-    var dest = destDir+'o2_core/';
-    return gulp.src(src)
-        .pipe(assetRev())
-        .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+path+'/')))
-        .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
-            host: options.host,
-            user: options.user || 'anonymous',
-            pass: options.pass || '@anonymous',
-            port: options.port || 21,
-            remotePath: (options.remotePath || '/')+path
-        })))
-        .pipe(gulpif((options.upload=='sftp'&&options.host!=''), sftp({
-            host: options.host,
-            user: options.user || 'anonymous',
-            pass: options.pass || null,
-            port: options.port || 22,
-            remotePath: (options.remotePath || '/')+path
-        })))
-        .pipe(gulp.dest(dest))
-        .pipe(uglify())
-        .pipe(rename({ extname: '.min.js' }))
-        .pipe(gulpif((options.upload=='local'&&options.location!=''), gulp.dest(options.location+path+'/')))
-        .pipe(gulpif((options.upload=='ftp'&&options.host!=''), ftp({
-            host: options.host,
-            user: options.user || 'anonymous',
-            pass: options.pass || '@anonymous',
-            port: options.port || 21,
-            remotePath: (options.remotePath || '/')+path
-        })))
-        .pipe(gulpif((options.upload=='sftp'&&options.host!=''), sftp({
-            host: options.host,
-            user: options.user || 'anonymous',
-            pass: options.pass || null,
-            port: options.port || 22,
-            remotePath: (options.remotePath || '/')+path
-        })))
-        .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
-});
-gulp.task("o2:new-v", gulp.parallel("o2:new-v:o2", "o2:new-v:html"));
-
-gulp.task("default", gulp.series("clean", gulp.parallel(minTasks, moveTasks, 'index'), "o2:new-v"));

+ 0 - 42
o2server/package.json

@@ -1,42 +0,0 @@
-{
-  "name": "o2oa_web",
-  "version": "1.1.7",
-  "description": "a javascript library",
-  "main": "o2.js",
-  "scripts": {
-    "build": "gulp",
-    "report-coverage": "codecov"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/huqi1980/o2oa_client_web.git"
-  },
-  "keywords": [
-    "oa",
-    "office",
-    "workflow",
-    "process",
-    "cms",
-    "bpm",
-    "portal"
-  ],
-  "author": "Tommy-O2OA",
-  "license": "AGPL-3.0",
-  "bugs": {
-    "url": "https://github.com/huqi1980/o2oa_client_web/issues"
-  },
-  "homepage": "https://github.com/huqi1980/o2oa_client_web#readme",
-  "devDependencies": {
-    "gulp": "^4.0.0",
-    "gulp-tm-asset-rev": "0.0.16",
-    "gulp-changed": "^3.2.0",
-    "gulp-deleted": "0.0.2",
-    "gulp-ftp": "^1.1.0",
-    "gulp-if": "^2.0.2",
-    "gulp-rename": "^1.4.0",
-    "gulp-sftp": "^0.1.5",
-    "gulp-tm-uglify": "^3.0.1",
-    "merge-stream": "^1.0.1",
-    "minimist": "^1.2.0"
-  }
-}

+ 3 - 1
o2web/.gitignore

@@ -9,5 +9,7 @@ npm-debug.log
 **/*.min.js
 package-lock.json
 /.svn/
+/ftpconfig.js
+/gulpconfig.js
 ftpconfig.js
-gulpconfig.js
+gulpconfig.js

+ 2 - 2
o2web/gulpapps.js

@@ -1,4 +1,4 @@
-var dev = [
+var apps = [
     { "folder": "o2_lib", "tasks": ["move"] },
     { "folder": "o2_core", "tasks": ["move", "min"] },
     { "folder": "x_component_ANN", "tasks": ["move", "min"] },
@@ -86,4 +86,4 @@ var dev = [
     { "folder": "x_desktop", "tasks": ["move", "min"] },
 ];
 
-module.exports = dev;
+module.exports = apps;

+ 0 - 20
o2web/gulpconfig.js

@@ -1,20 +0,0 @@
-module.exports = {
-    "dev": {
-        'location': 'E:/o2server/servers/webServer/',
-        'host': 'dev.o2oa.net',
-        'user': 'xadmin',
-        'pass': 'o2No.one',
-        "port": 21,
-        "remotePath": "/",
-        "dest": "dest"
-    },
-    "release": {
-        'host': 'release.o2oa.net',
-        'user': 'o2web',
-        'pass': 'o2No.one',
-        "port": 21,
-        "remotePath": "/",
-        "dest": "D:/O2/github/o2oa/o2oa/o2web/source"
-    },
-    "wrdp": {}
-};

+ 14 - 1
o2web/gulpfile.js

@@ -90,7 +90,7 @@ function getAppTask(path, isMin, thisOptions) {
                     port: option.port || 22,
                     remotePath: (option.remotePath || '/') + path
                 })))
-                .pipe(gulpif((option.ev == "dev") ,gulp.dest(dest)))
+                .pipe(gulpif((option.ev == "dev" || option.ev == "pro") ,gulp.dest(dest)))
 
                 .pipe(gulp.src(src_move))
                 .pipe(changed(dest))
@@ -367,3 +367,16 @@ gulp.task("git_dest", function () {
 gulp.task("git", gulp.series('git_clean', 'git_dest'));
 
 gulp.task("default", gulp.series(gulp.parallel(appTasks, 'index'), "o2:new-v"));
+
+function build(){
+    options.ev = "p";
+    options.upload = o_options.upload || "";
+    options.location = o_options.location || uploadOptions.location;
+    options.host = o_options.host || uploadOptions.host;
+    options.user = o_options.user || uploadOptions.user;
+    options.pass = o_options.pass || uploadOptions.pass;
+    options.port = o_options.port || uploadOptions.port;
+    options.remotePath = o_options.remotePath || uploadOptions.remotePath;
+    options.dest = o_options.dest || uploadOptions.dest || "dest";
+};
+gulp.task("build", gulp.series("clean", gulp.parallel(appTasks, 'index'), "o2:new-v"))

+ 0 - 1
o2web/source/o2_core/o2/xDesktop/shortcut.js

@@ -45,7 +45,6 @@ MWF.shortcut = {
     }
 };
 
-debugger;
 MWF.shortcut.keyboard = new Keyboard({
     defaultEventType: 'keydown',
     events: {

+ 1 - 1
o2web/source/x_component_Minder/MineExplorer.js

@@ -68,7 +68,7 @@ MWF.xApplication.Minder.MineExplorer = new Class({
         var treeSize = this.treeNode.getSize();
         var naviSize = this.app.naviNode.getSize();
 
-        var x = size.x - treeSize.x - naviSize.x;
+        var x = size.x - treeSize.x - naviSize.x - 5;
 
         this.treeNode.setStyle("height", size.y);
 

+ 1 - 1
o2web/source/x_component_Profile/$Main/newVersion/style.css

@@ -36,7 +36,7 @@
 }
 .o2_profile_configNode {
     min-height: 640px;
-    position: relative;
+   /* position: relative;*/
 }
 .o2_profile_inforConfigArea {
     height: 360px;

+ 5 - 1
o2web/source/x_component_Selector/IdentityWidthDuty.js

@@ -169,7 +169,8 @@ MWF.xApplication.Selector.IdentityWidthDuty.ItemCategory = new Class({
         this.iconNode.setStyle("background-image", "url("+"/x_component_Selector/$Selector/"+style+"/icon/companyicon.png)");
     },
     loadSub: function(callback){
-        if (!this.loaded){
+        if (!this.loaded  && !this.loading){
+            this.loading = true;
             if (this.selector.options.units.length){
                 var action = MWF.Actions.get("x_organization_assemble_express");
                 var data = {"name":this.data.name, "unit":""};
@@ -209,6 +210,7 @@ MWF.xApplication.Selector.IdentityWidthDuty.ItemCategory = new Class({
                         if (i>=count){
                             if (!this.loaded) {
                                 this.loaded = true;
+                                this.loading = false;
                                 this.itemLoaded = true;
                                 if (callback) callback();
                             }
@@ -233,6 +235,7 @@ MWF.xApplication.Selector.IdentityWidthDuty.ItemCategory = new Class({
                             if (i>=count){
                                 if (!this.loaded) {
                                     this.loaded = true;
+                                    this.loading = false;
                                     this.itemLoaded = true;
                                     if (callback) callback();
                                 }
@@ -252,6 +255,7 @@ MWF.xApplication.Selector.IdentityWidthDuty.ItemCategory = new Class({
                         }
                     }.bind(this));
                     this.loaded = true;
+                    this.loading = false;
                     if (callback) callback();
                 }.bind(this), null, this.data.name);
             }

+ 13 - 12
o2web/source/x_component_Selector/Person.js

@@ -2104,12 +2104,12 @@ MWF.xApplication.Selector.Person.ItemCategory = new Class({
             }.bind(this));
         }
 
-        var subIdList = this.selector._getChildrenItemIds(this.data);
-        if (subIdList){
-            var count = subIdList.length;
-            this.childrenHeight = count*this.selector.options.itemHeight;
-            this.children.setStyle("height", ""+this.childrenHeight+"px");
-        }
+        // var subIdList = this.selector._getChildrenItemIds(this.data);
+        // if (subIdList){
+        //     var count = subIdList.length;
+        //     this.childrenHeight = count*this.selector.options.itemHeight;
+        //     this.children.setStyle("height", ""+this.childrenHeight+"px");
+        // }
         //if (!this._hasChild()){
         //    this.textNode.setStyle("color", "#333");
         //}
@@ -2211,12 +2211,13 @@ MWF.xApplication.Selector.Person.ItemCategory = new Class({
         }).inject(this.node, "after");
         if (!this.selector.options.expand) this.children.setStyle("display", "none");
 
-        var subIdList = this.selector._getChildrenItemIds(this.data);
-        if (subIdList){
-            var count = subIdList.length;
-            this.childrenHeight = count*this.selector.options.itemHeight;
-            this.children.setStyle("height", ""+this.childrenHeight+"px");
-        }
+        // var subIdList = this.selector._getChildrenItemIds(this.data);
+        // if (subIdList){
+        //     var count = subIdList.length;
+        //     this.childrenHeight = count*this.selector.options.itemHeight;
+        //     this.children.setStyle("height", ""+this.childrenHeight+"px");
+        // }
+
         if (!this._hasChild()){
             this.actionNode.setStyle("background", "transparent");
             this.textNode.setStyle("color", "#777");

+ 66 - 50
package.json

@@ -1,52 +1,68 @@
 {
-  "name": "o2oa",
-  "version": "4.0.3763",
-  "description": "o2oa",
-  "main": "",
-  "scripts": {
-    "preperation": "gulp preperation",
-    "preperation:win": "gulp preperation --e windows",
-    "preperation:linux": "gulp preperation --e linux",
-    "preperation:aix": "gulp preperation --e aix",
-    "preperation:kylinos": "gulp preperation --e kylinos",
-    "preperation:macos": "gulp preperation --e macos",
-    "preperation:neokylin": "gulp preperation --e neokylin",
-    "preperation:rpi": "gulp preperation --e raspberrypi",
-    "build_server": "cd o2server && mvn clean && mvn install",
-    "build_web": "cd o2server && npm install && gulp",
-    "build_parallel": "npm run build_server & npm run build_web",
-    "deploy": "gulp deploy",
-    "deploy:win": "gulp deploy --e windows",
-    "deploy:linux": "gulp deploy --e linux",
-    "deploy:aix": "gulp deploy --e aix",
-    "deploy:kylinos": "gulp deploy --e kylinos",
-    "deploy:macos": "gulp deploy --e macos",
-    "deploy:neokylin": "gulp deploy --e neokylin",
-    "deploy:rpi": "gulp deploy --e raspberrypi",
-    "typeInfor": "type welcome && echo Your server is build success: target/o2server/",
-    "build": "npm run preperation && npm run build_parallel && npm run deploy && npm run typeInfor",
-    "build:win": "npm run preperation:win && npm run build_parallel && npm run deploy:win && npm run typeInfor",
-    "build:linux": "npm run preperation:linux && npm run build_parallel && npm run deploy:linux && npm run typeInfor",
-    "build:aix": "npm run preperation:aix && npm run build_parallel && npm run deploy:aix && npm run typeInfor",
-    "build:kylinos": "npm run preperation:kylinos && npm run build_parallel && npm run deploy:kylinos && npm run typeInfor",
-    "build:macos": "npm run preperation:macos && npm run build_parallel && npm run deploy:macos && npm run typeInfor",
-    "build:neokylin": "npm run preperation:neokylin && npm run build_parallel && npm run deploy:neokylin && npm run typeInfor",
-    "build:rpi": "npm run preperation:rpi && npm run build_parallel && npm run deploy:rpi && npm run typeInfor",
-    "test": "type welcome"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/o2oa/o2oa.git"
-  },
-  "author": "",
-  "license": "ISC",
-  "dependencies": {
-    "dateformat": "^3.0.3",
-    "gulp": "^4.0.2",
-    "gulp-util": "^3.0.8",
-    "progress-stream": "^2.0.0",
-    "request": "^2.88.2",
-    "single-line-log": "^1.1.2",
-    "targz": "^1.0.1"
-  }
+        "name": "o2oa",
+        "version": "4.0.3763",
+        "description": "o2oa",
+        "main": "",
+        "scripts": {
+                "preperation": "gulp preperation",
+                "preperation:win": "gulp preperation --e windows",
+                "preperation:linux": "gulp preperation --e linux",
+                "preperation:aix": "gulp preperation --e aix",
+                "preperation:kylinos": "gulp preperation --e kylinos",
+                "preperation:macos": "gulp preperation --e macos",
+                "preperation:neokylin": "gulp preperation --e neokylin",
+                "preperation:rpi": "gulp preperation --e raspberrypi",
+
+                "build_server": "gulp build_server",
+                "build_server_script": "cd o2server && mvn clean && mvn install",
+                "build_web": "gulp build_web",
+                "build_parallel": "npm run build_server && npm run build_web",
+
+                "deploy": "gulp deploy",
+                "deploy:win": "gulp deploy --e windows",
+                "deploy:linux": "gulp deploy --e linux",
+                "deploy:aix": "gulp deploy --e aix",
+                "deploy:kylinos": "gulp deploy --e kylinos",
+                "deploy:macos": "gulp deploy --e macos",
+                "deploy:neokylin": "gulp deploy --e neokylin",
+                "deploy:rpi": "gulp deploy --e raspberrypi",
+
+                "typeInfor": "type welcome && echo Your server is build success: target/o2server/",
+                "clear": "gulp clear_build",
+
+                "build": "npm run clear && npm run preperation && npm run build_parallel && npm run deploy && npm run typeInfor",
+                "build:win": "npm run clear && npm run preperation:win && npm run build_parallel && npm run deploy:win && npm run typeInfor",
+                "build:linux": "npm run clear && npm run preperation:linux && npm run build_parallel && npm run deploy:linux && npm run typeInfor",
+                "build:aix": "npm run clear && npm run preperation:aix && npm run build_parallel && npm run deploy:aix && npm run typeInfor",
+                "build:kylinos": "npm run clear && npm run preperation:kylinos && npm run build_parallel && npm run deploy:kylinos && npm run typeInfor",
+                "build:macos": "npm run clear && npm run preperation:macos && npm run build_parallel && npm run deploy:macos && npm run typeInfor",
+                "build:neokylin": "npm run clear && npm run preperation:neokylin && npm run build_parallel && npm run deploy:neokylin && npm run typeInfor",
+                "build:rpi": "npm run clear && npm run preperation:rpi && npm run build_parallel && npm run deploy:rpi && npm run typeInfor",
+                "test": "type welcome"
+        },
+        "repository": {
+                "type": "git",
+                "url": "https://github.com/o2oa/o2oa.git"
+        },
+        "author": "",
+        "license": "ISC",
+        "dependencies": {
+                "dateformat": "^3.0.3",
+                "fast-glob": "^3.2.2",
+                "gulp": "^4.0.2",
+                "gulp-changed": "^3.2.0",
+                "gulp-deleted": "^1.0.0",
+                "gulp-if": "^2.0.2",
+                "gulp-logger": "0.0.2",
+                "gulp-rename": "^1.4.0",
+                "gulp-shell": "^0.8.0",
+                "gulp-tm-asset-rev": "0.0.16",
+                "gulp-tm-uglify": "3.0.1",
+                "gulp-util": "^3.0.8",
+                "minimist": "^1.2.0",
+                "progress-stream": "^2.0.0",
+                "request": "^2.88.2",
+                "single-line-log": "^1.1.2",
+                "targz": "^1.0.1"
+        }
 }