首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gulp-concat :从未知来源到相同目的地

gulp-concat :从未知来源到相同目的地
EN

Stack Overflow用户
提问于 2015-12-17 06:43:19
回答 2查看 249关注 0票数 0

我最近开始使用gulp来组织我的开发项目,但我遇到了一些我无法理解的事情。所以这是我的任务:

代码语言:javascript
复制
gulp.task('jsassemble', function () { 
   return gulp
   .src('vendor/proj/**/**/src/assets/js/*.js')
   .pipe(concat('all.js'))
  .pipe(gulp.dest('public/js'));
});

正如您所看到的,它将获取公共中的每个js文件,将它们放在一起,将新创建的js重命名为'all.js‘,然后将其放入vendor/proj/anyFolder/anySubFolder/src/assets/js,/js中。问题是我想要gulp来保持文件夹的层次结构,例如:

来源= vendor/proj/anyFolder1/anySubFolder1/src/assets/js/*.js

目的地= public/js/anyFolder1/anySubFolder1/src/assets/js/all.js

来源= vendor/proj/anyFolder1/anySubFolder2/src/assets/js/*.js

目的地= public/js/anyFolder1/anySubFolder2/src/assets/js/all.js

而不是简单地将这些文件夹中的所有内容放到一个1中,并且只有public/js/all.js

有没有办法做到这一点?我尝试先在谷歌上搜索,但我不能用几个词来恰当地表达我的问题,得到了不想要的结果:/

EN

回答 2

Stack Overflow用户

发布于 2015-12-17 06:55:42

你可以创建一个保持文件夹层次结构的函数。在此页面(http://www.jamescrowley.co.uk/2014/02/17/using-gulp-packaging-files-by-folder/)中,您可以找到解决方案。

代码语言:javascript
复制
var fs = require('fs');
var path = require('path');
var es = require('event-stream');
var gulp = require('gulp');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var uglify = require('gulp-uglify');

var scriptsPath = './src/scripts/';

function getFolders(dir){
    return fs.readdirSync(dir)
      .filter(function(file){
        return fs.statSync(path.join(dir, file)).isDirectory();
      });
}

gulp.task('scripts', function() {
   var folders = getFolders(scriptsPath);

   var tasks = folders.map(function(folder) {
      return gulp.src(path.join(scriptsPath, folder, '/*.js'))
        .pipe(concat(folder + '.js'))
        .pipe(gulp.dest(scriptsPath))
        .pipe(uglify())
        .pipe(rename(folder + '.min.js'))
        .pipe(gulp.dest(scriptsPath));
   });

   return es.concat.apply(null, tasks);
});
票数 0
EN

Stack Overflow用户

发布于 2015-12-17 09:00:02

感谢@caballerog,他让我走上了正确的道路,下面是解释代码:

代码语言:javascript
复制
//get every folder from a 'pathTo/Something'
function getFolders(dir){
   return fs.readdirSync(dir)
       return fs.statSync(path.join(dir, file)).isDirectory();

}


var projectsRoot = 'vendor/proj/';
var pathToJsFiles = '/src/assets/js/';
var pathToPublic = 'public/js/';

gulp.task('scripts', function() {

var sites = [];
var pathToProjects = [];

// Fetching every folders in vendor/proj
projects = getFolders(projectsRoot);

// Fetching every subfolder in vendor/proj/something
for(index in projects){
  sites.push(getFolders(projectsRoot + '/' + projects[index]));
}

// Pushing every projects/site that exists into an array
for(var i=0;i<projects.length;i++){
  for(var j=0; j<sites.length; j++)
    if(sites[i][j] != null)
      pathToProjects.push(projects[i] + '/' + sites[i][j]);
}

// Fetching every JS on vendor/proj/pathToAProject/pathToJsFiles
// concatenate them together
// and sending them to pathToPublic/pathToAProject/all.js
var tasks = pathToProjects.map(function(pathToAProject) {
   return gulp.src( projectsRoot + pathToAProject + pathToJsFiles + '/*.js')
    .pipe(concat('all.js'))
    .pipe(gulp.dest(pathToPublic + pathToAProject));
});

return es.concat.apply(null, tasks);
});

TL:DR =获取pathToPublic/someFolder/someFolder/PathToJS中的每个JS文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34323566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档