Gulp минимизировать и перемещать файлы с той же структурой папок - PullRequest
0 голосов
/ 29 января 2020

У меня есть структура папок, подобная этой:

.
├── dist/
└── src/
    ├── index.php
    └── projects/
        ├── some-project/
        │   ├── main.css
        │   ├── main.js
        │   └── index.html
        └── N'th project/ ...

Мне нужно минимизировать и переместить каждый проект внутри src / в dist / без нарушения структуры папок. Должно выглядеть так:

.
├── dist/
│   ├── index.php
│   └── projects/
│       ├── some-project/
│       │   ├── main.css(minified)
│       │   ├── main.js(minified)
│       │   └── index.html
│       └── N'th project/ (also minified) ...
└── src/
    ├── index.php
    └── projects/
        ├── some-project/
        │   ├── main.css
        │   ├── main.js
        │   └── index.html
        └── N'th project/ ...

Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020
gulp.task("projectTest", () => {

  return gulp.src("./src/projects/**/*.css")
    // minify pipe, etc.
    .pipe(gulp.dest('dist/projects'))
});

From https://gulpjs.com/docs/en/api/concepts#glob -base :

База glob - иногда называемая glob parent - это сегмент пути перед любыми специальными символами в строке glob. Таким образом, база шарика /src/js/**.js равна /src/js/. Все пути, которые соответствуют глобу, гарантированно разделяют базу глоба - этот сегмент пути не может быть переменным.

Виниловые экземпляры, генерируемые src(), создаются с базой глобуса, установленной как их свойство base. При записи в файловую систему с помощью dest(), base будет удален из пути вывода для сохранения структур каталогов.

Это немного сбивает с толку, как написано. В моем коде часть перед globstar ** - это base. Так что ./src/projects/ является базой. И структура каталогов в base всегда сохраняется - но это не будет включать projects (потому что это часть base и будет автоматически удалена в gulp.dest).

В канал dest, структуры каталогов (project1, project2, et c.) все еще существуют, но будут отправлены в вашу папку dest без пути base в начале. Поэтому вам нужно будет добавить любую часть этого пути base обратно в вашу папку dest, если вы этого хотите.

Итак, gulp.dest('dist/projects'), чтобы вернуть сохраненную структуру папок в projects, как вы хотеть.


Так что если то, что я сказал, является верным, этот вариант также должен работать:

gulp.task("projectTest", () => {

  // return gulp.src("./src/projects/**/*.css")

  return gulp.src("./src/**/*.css")

    // .pipe(gulp.dest('dist/projects'))

    .pipe(gulp.dest('dist'))
});

Теперь структура каталогов в src сохраняется (потому что src является base). Таким образом, вы получите тот же результат, просто отправив все это на dist.

Вы можете решить, какую форму вы предпочитаете, я думаю, что первая версия немного понятнее. И если в src есть файлы, которые вы не хотите захватывать глобусом gulp.src.

0 голосов
/ 30 января 2020

Я решил что-то вроде этого. Если кто-то хочет использовать:

.pipe(gulp.dest(function(file){
            let splittedUrl = file.history[0].split("\\");
            let projectName = splittedUrl.slice(splittedUrl.indexOf("projects"),-1);
            //console.log(projectName.join("/"));
            return "dist/" + projectName.join("/");
        }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...