Gulp – 将供应商发布到文件夹

对于所有的JS代码,我已经将我的项目生成之前进行了缩小和uglify。

var config = { dest: 'www', vendor: [ './node_modules/jquery/dist/jquery.js', './node_modules/angular/angular.js', './node_modules/motion-ui/dist/motion-ui.js', './node_modules/angular-animate/angular-animate.js', './node_modules/angular-sanitize/angular-sanitize.js', './node_modules/angular-ui-router/release/angular-ui-router.js', './node_modules/angular-translate/dist/angular-translate.js', './node_modules/angular-translate-loader-static-files/angular-translate-loader-static-files.js', './src/vendors/tinymce/tinymce.js', './src/vendors/tinymce/ui-tinymce.js', './src/vendors/googleMaps/js/ui-googleMaps.js', './src/vendors/googleMaps/js/ui-mapUpload.js', './src/vendors/LocationPicker/locationpicker-jquery.js', './src/vendors/rzslider/rzslider.js', './src/vendors/cropit/jquery.cropit.js', ] }; gulp.task('js', function () { streamqueue({ objectMode: true }, gulp.src(config.vendor.js), gulp.src('./src/appConfig.js').pipe(ngFilesort()), gulp.src('./src/features/**/*.js').pipe(ngFilesort()), gulp.src('./src/modules/**/*.js').pipe(ngFilesort()), gulp.src('./src/assets/js/**/*.js').pipe(ngFilesort()) ) .pipe(sourcemaps.init()) .pipe(concat('app.js')) .pipe(ngAnnotate()) .pipe(uglify()) .pipe(rename({ suffix: '.min' })) .pipe(sourcemaps.write('.')) .pipe(gulp.dest(path.join(config.dest, 'js'))); }); 

但我注意到一些插件正在读取它们的CSS和字体文件的特定path,比如TinyMCE(tinymce.js代码):

 n = n ? e.documentBaseURI.toAbsolute(n) : tinymce.baseURL + "/skins/" + i, t.skinUiCss = tinymce.Env.documentMode <= 7 ? n + "/skin.ie7.min.css" : n + "/skin.min.css", e.contentCSS.push(n + "/content" + (e.inline ? ".inline" : "") + ".min.css") 

为了处理这些情况,我正在运行一个gulp任务,将文件/文件夹复制到我定义的特定path:

 var config = { //... vendorNotMinified: { src: [ './src/vendors/tinymce/skins' ], dest: [ '/plugins/tinymce/' ] } }; gulp.task('vendors', function () { for (var i = 0; i < config.vendorNotMinified.length; i++) gulp.src(config.vendorNotMinified.src[i]) .pipe(gulp.dest(config.dest + config.vendorNotMinified.dest[i])); }); 

但我的vendors任务不是创buildplugins文件夹。

问题在哪里,如何以dynamic的方式解决这个问题?

注意:我已经将TinyMCE行更改为:

 n = "./plugins/tinymce/skins/" + i, t.skinUiCss = tinymce.Env.documentMode <= 7 ? n + "/skin.ie7.min.css" : n + "/skin.min.css", e.contentCSS.push(n + "/content" + (e.inline ? ".inline" : "") + ".min.css") 

解决了! 问题是在循环上运行循环的条件。 所以我改变了我的任务代码,现在工作:

 gulp.task('vendors', function (done) { for (var i = 0; i < config.vendorNotMinified.src.length; i++) gulp.src(config.vendorNotMinified.src[i]) .pipe(gulp.dest(config.dest + config.vendorNotMinified.dest[i])); return gulp.src(config.vendorNotMinified.src); }); 

我需要return gulp.src()因为像Sindre Sorhus在这篇文章中所说,这是需要使任务asynchronous。

要正确复制所有文件和文件夹,我需要添加另一个path到我的config.vendorNotMinified

 var config = { //... vendorNotMinified: { src: [ './src/vendors/tinymce/skins', './src/vendors/tinymce/skins/**' ], dest: [ '/plugins/tinymce/', '/plugins/tinymce/skins/' ] }, };