2016-03-30 13 views
0

gulpを使用して自分のベンダーファイルを自分のdevフォルダにコピーしようとしています。私が開発モードに入っていたとき、未対応のファイルがコピーされていない場合は、未対応のファイルのみをコピーします。生産モードでは、ファイルが存在しない場合は、ミニファイル化されたファイルをコピーして、通常のファイルを縮小します。指定したファイルをgulpを使用して条件付きでコピーします

私のフォルダ構造

js 
    app.js 
jquery 
    jquery.min.js 
    jquery.js 
fontawesome 
    fontawesome.min.js 
    fontawesome.min.css 
    fonts.ttf... 

ここに私が書いた私の基本。

var scriptsPath = '../vendor/'; 
function getFolders(dir) { 
    return fs.readdirSync(dir) 
     .filter(function(file) { 
      return fs.statSync(path.join(dir, file)).isDirectory(); 
     }); 
} 
gulp.task('vendor', function() { 
    var folders = getFolders(scriptsPath); 
    var cssFilter = $.filter('**/*.css') 
    var tasks = folders.map(function(folder) { 
     var jsFilter; 
    if (isProduction) { 
     jsFilter = $.filter('**/*.min.js'); 
    } else { 
     jsFilter = $.filter(['**/*.js', '!**/*.min.js']); 
    } 
     return gulp.src(path.join(scriptsPath, '**/')) 
      .pipe(jsFilter) 
      .pipe($.if(useSourceMaps, $.sourcemaps.init())) 
      .pipe($.if(isProduction, $.uglify({preserveComments: 'some'}))) 
      .on('error', handleError) 
      .pipe(jsFilter.restore()) 
      .pipe(cssFilter) 
      .pipe($.if(isProduction, $.minifyCss())) 
      .on('error', handleError) 
      .pipe(cssFilter.restore()) 
      .on('error', handleError) 
      .pipe(gulp.dest(build.vendor.js)); 
    }); 
    return es.concat.apply(null, tasks); 
}); 

私は&一気-かのいくつかのメソッドを使用して、最後の2日間しようとしています。しかし、まだ解決策を得ることはできません。事前に感謝します。

答えて

1

あなたはvendorタスクに多くの方法で詰め込もうとしています。 JSファイルを使って行う作業は、CSSファイルで行う作業とはまったく関係ありません。それは読みにくいです。

代わりのgulp-filterを使ってvendor-jsvendor-css、などのような小さなタスクに分割vendorを試してみてください...そして、あなたのvendorタスクの依存関係として宣言:

gulp.task('vendor', ['vendor-js', 'vendor-css' /* etc ... */]); 

あなたvendor-jsタスクは、このようになります。 :

var glob = require('glob'); 

gulp.task('vendor-js', function() { 

    var js = glob.sync('../vendor/**/*.js'); 

    if (isProduction) { 
    // use <file>.min.js, unless there is only <file>.js 
    js = js.filter(function(file) { 
     return file.match(/\.min\.js$/) || 
     js.indexOf(file.replace(/\.js$/, '.min.js')) < 0; 
    }); 
    } else { 
    // use <file>.js, unless there is only <file>.min.js 
    js = js.filter(function(file) { 
     return !file.match(/\.min\.js$/) || 
     js.indexOf(file.replace(/\.min\.js$/, '.js')) < 0; 
    }); 
    } 

    gulp.src(js, { base: '../vendor' }) 
    .pipe($.if(isProduction,     // only minify for prod and when 
      $.if("!**/*.min.js", uglify()))) // the file isn't minified already 
    .pipe(gulp.dest('build')); 
}); 

これをあなたに合わせることは、ここからかなり簡単です。

+0

ありがとうございます。正常に動作します。 – Sathish

関連する問題