2016-10-20 9 views
0

GULPのバックアップと改訂のタスクを自動化したいnode.jsのプロジェクトがあります。node.jsとのGULPの統合

私は正常に動作するすべてのターミナルと完全に次のgulpコードを正常にテストすることができます。問題は、node.jsコードからgulpタスクを実行するときに発生します。

ガルプコード:

var gulp = require('gulp'); 
var runSequence = require('run-sequence'); 
var rev = require('gulp-rev'); 
var format = require('date-format'); 

var dt = (new Date()); 
var gBkup = __dirname + '/backup/' + format.asString('ddMMyyyy_hhmm', dt); 
var config = __dirname + '/gHelper.json', mnf = __dirname + '/rev-manifest.json'; 

var cssSrc = [], cssSrcO = [], cssSrcI = []; 
var dirSrc = [], dirSrcO = [], dirSrcI = []; 

gulp.task('init', function(){  // Initialize paths and all arrays containing file paths 
    var fexists = require('file-exists'); 
    //console.log('Config exists: ' + fexists(config)); 
    if (fexists(config)) { 
     config = require(config); 
    } 

    //console.log('Config object: ' + config); 

    if (fexists(mnf)) { 
     mnf = require(mnf); 
    } 

    for (var file in config.revision.ext_css) { 
     var fnm = __dirname + '/preview/' + config.revision.ext_css[file]; 
     cssSrc.push(fnm); 

     if (mnf[config.revision.ext_css[file]] != "") { 
      var hnm = __dirname + '/live/' + mnf[config.revision.ext_css[file]]; 
      cssSrcO.push(hnm); 
      console.log("Manifest: " + hnm); 
     } 
    } 

    for (var dir in config.revision.dir) { 
     dirSrc.push(__dirname + '/preview/' + config.revision.dir[dir]); 
     var dirnm = __dirname + '/live/' + config.revision.dir[dir]; 
     dirnm = dirnm.substr(0, dirnm.length-3); 
     dirSrcO.push(dirnm); 
     console.log("Directory: " + dirnm); 
    } 

    // Files and directories will be ignored in revision 
    for (var file in config.revision.ext_css) { 
     cssSrcI.push('!' + __dirname + '/preview/' + config.revision.ext_css[file]); 
    } 

    for (var dir in config.revision.dir) { 
     dirSrcI.push('!' + __dirname + './preview/' + config.revision.dir[dir]); 
    } 

    //console.log('Ignore CSS: ' + cssSrcI); 
    //console.log('Ignore DIR: ' + dirSrcI); 
}); 

// Revisioning Files 
gulp.task('revisionCSS', function() {  // Revise CSS scripts 
    var cssDest = __dirname + config.revision.ext_css_dest; 

    console.log('cssDestination: ' + cssDest); 
    return gulp.src(cssSrc) 
     .pipe(rev()) 
     .pipe(gulp.dest(cssDest)) 
     .pipe(rev.manifest({base: cssDest, merge: true})) 
     .pipe(gulp.dest(cssDest)) 
}); 

gulp.task('revInnerScripts', function() { // Revise javascripts 
    var dirDest = __dirname + config.revision.ext_dir_dest; 
    var cssDest = __dirname + config.revision.ext_css_dest; 

    console.log('dirInner: ' + dirDest); 
    console.log('cssInner: ' + cssDest); 

    return gulp.src(dirSrc) 
     .pipe(rev()) 
     .pipe(gulp.dest(dirDest)) 
     .pipe(rev.manifest({base: cssDest, merge: true})) 
     .pipe(gulp.dest(cssDest)); 
}); 

gulp.task('copyIgnoreRevision', function() { // Simply copy other/ignored files from array 
    var src = [__dirname + '/preview/**'] 
    src = src.concat(cssSrcI); 
    src = src.concat(dirSrcI); 
    console.log(src) 

    return gulp.src(src) 
    .pipe(gulp.dest(__dirname + '/live')); 
}); 

gulp.task('removeLive', function(callback) { // Removing files 
    var del = require('del'); 
    var src = cssSrcO.concat(dirSrcO); 
    console.log("Removing Files: " + src); 
    return del(src); 
}); 

gulp.task('backupLive', function() {   // Backing up revision files before taking revision 
// var src = ['./Live/**']; 
    gulp.src(cssSrcO).pipe(gulp.dest(gBkup)); 

    return gulp.src(dirSrcO).pipe(gulp.dest(gBkup + "/js"));; 
/* return gulp.src(cssSrcO, {read: false}) 
     .pipe(clean());*/ 

}); 

gulp.task('backup', function(callback) {  // Backup tasks list 
    runSequence('backupLive', 'removeLive', callback); 
}); 
gulp.task('revise', ['copyIgnoreRevision', 'revisionCSS', 'revInnerScripts']); 
gulp.task('revback', function (callback) { 
    runSequence('init', 'backup', 'revreplace', callback); 
}); 

// Replacing references 
gulp.task('revreplace', ['revise'], function(callback) {  // In callback replace references for revised files 
    var revReplace = require('gulp-rev-replace'); 
    var mReps = gulp.src(__dirname + '/rev-manifest.json'); 
    return gulp.src(__dirname + '/preview/*.html') 
     .pipe(revReplace({manifest: mReps})) 
     .pipe(gulp.dest(__dirname + '/live')); 
}); 

gHelper.json:改訂する必要がリストファイル。他のすべては宛先ディレクトリにコピーされます。

{ 
    "revision": { 
    "ext_css" : [ 
     "extie.css", 
     "responsive.css", 
     "style.css" 
    ], 
    "ext_css_dest": "/live", 
    "dir": [ 
     "js/*.js" 
    ], 
    "ext_dir_dest": "/live/js" 
    } 
} 

基本フォルダ構造

MainFolder/ 
    gHelper.json 
    gulpfile.js 
    preview/ 
    HTML files which contains references to revision files 
    Revision files (CSS and JS). CSS files are mentioned in gHelper.json 
    js/ 
     Revision files (mainly js) which are to be revised as this folder is mentioned in gHelper.json and all files from the folder will be revised 

一気タスクrevbackが呼び出されると、フォルダliveMainFolder内部で生成され、追加されます。再度revbackを呼び出すと、最初にbackup/{timestamp}フォルダーが生成され、修正されたファイルのバックアップのみをとり、liveフォルダーに対してリビジョンが作成されます。

のNode.jsからコードを参照できます:今、問題は時々飲み込むタスクが完了されていないことを来る

/*クライアントを公開*/

var gulp = require('gulp'); 
router.post('/api/:clientName/publish', function(req, res, next) { 
    var clientName = req.params.clientName; 
    var filePath = '/gulpfile'; // Full path for gulp file 

    console.log("Publish client: " + filePath); 
    try { 
     var gtask = require(filePath); 

     if (gulp.tasks.revback) { 
      console.log('gulp file contains task!'); 
      gulp.start('revback'); 
     } 
    } catch (err) { 
     return console.error(err); 
    } 
}); 

を、REV-manifest.jsonをです正しい位置に作成されていないのはMainFolderですが、このnode.jsが存在するフォルダの外側に作成されています。

問題の解決方法をお知らせください。ありがとうございます。以下は


REV-manifest.jsonをの内容です:

{ 
    "dctConf.js": "dctConf-7c467cb7cb.js", 
    "extie.css": "extie-a8724bfb0c.css", 
    "responsive.css": "responsive-76492b9ad4.css", 
    "style.css": "style-770db73beb.css", 
    "translation.js": "translation-9687245bfb.js" 
} 

答えて

0

でこれを追加し、私は一気のネイティブコールバックを使用して、実行シーケンスモジュールを削除しました。

例えば:

gulp.task('revback', ['revise'], function(callback) { 
    var revReplace = require('gulp-rev-replace'); 
    var mReps = gulp.src(__dirname + '/rev-manifest.json'); 

    console.log('Manifest content: ' + mReps + ' && ' + __dirname + '/rev-manifest.json'); 

    return gulp.src(__dirname + '/preview/*.html') 
     .pipe(revReplace({manifest: mReps})) 
     .pipe(gulp.dest(__dirname + '/live')) 
     .once('error', function(e) { 
      console.log('Error at revback: ' + e); 
      callback(e); 
      process.exit(1); 
     }) 
     .once('end', function() { 
      console.log('Ending process at revback!'); 
      callback(); 
      process.exit(); 
     }); 
}); 

gulp.task('revise', ['copyIgnoreRevision', 'revisionCSS', 'revInnerScripts']); 

gulp.task('backupLive', ['init'], function() { 
// var src = ['./Live/**']; 
    gulp.src(cssSrcO).pipe(gulp.dest(gBkup)); 

    return gulp.src(dirSrcO).pipe(gulp.dest(gBkup + "/js")); 
/* return gulp.src(cssSrcO, {read: false}) 
     .pipe(clean());*/ 

}); 

この方法では、init機能にチェーン逆。

1

あなたはgulpfileの場所にgulpfile.jsに作業ディレクトリを変更してみてください可能性があります。ただ、トップ

process.chdir(__dirname); 

ドキュメント

+0

ありがとう@potatopeelings。これは動作していますが、それは回転交換の作業を停止しました。したがって、revreplaceであるgulpfile.jsの最後の関数は、HTMLファイルのファイル参照を置き換えることではありません。上記のrev-manifest.jsonの内容を追加しました。これに可能な解決策を教えてください。 –

+0

"rereplace"のコールバックが呼び出されていないため、rev-replaceが動作していないという問題が見つかりました。 :( –

+0

ここに何かヒントは@potatopeelings? –

関連する問題