Почему базовая опция Gulp 4 генерирует файл в моей текущей папке - PullRequest
0 голосов
/ 17 декабря 2018

Существует так много руководства для gulp 3, когда я следую руководству vscode (которое использует версию 3), но я использую gulp 4 после запуска npm install gulp

Я хочу скомпилировать scss в projectroot/jsp/scss/*.scss,выводить projectroot/jsp/out/css/...........

// Sass configuration
var gulp = require('gulp');
var sass = require('gulp-sass');
var { resolve } = require('path')
var cssOutput = resolve(__dirname, './jsp/out/css')
gulp.task('sass', gulp.series(function (done) {
    return gulp.src('jsp/scss/*.scss', { base: './jsp/out/css' })
        .pipe(sass())
        .pipe(gulp.dest(function (f) {
            done()
            console.log(f.base)
            return f.base;
        }))
}));

gulp.task('default', gulp.series('sass', function () {
    gulp.watch('jsp/scss/*.scss', gulp.series('sass'));
}))

при запуске gulp -f gulpfile.js

выводит index.css в моей папке scss

Как решить эту проблему?

вот моя папка

enter image description here

Я знаю, что есть много руководства по версии 3, но я использую версию 4 ...

1 Ответ

0 голосов
/ 17 декабря 2018

В вашем случае вам не нужна опция base.Этого достаточно:

return gulp.src('jsp/scss/*.scss')
    .pipe(sass())
    .pipe(gulp.dest("jsp/out/css"))

Я постараюсь объяснить, что, по моему мнению, происходит в вашем исходном коде.См. Объяснение опции base из базы глобусов в документации gulpjs :

базы глобусов

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

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

Последнее предложение является ключевым.База будет удалена - поэтому, когда вы возвращаете базу в функции dest, она не действует.Вы устанавливаете базу, но она удаляется, оставляя путь gulp.src 'jsp/scss/' в качестве структуры каталогов actve.

Это мое лучшее предположение относительно того, что происходит, когда вы возвращаете ту же базу, которая была удалена.

Теперь в моем упрощенном коде база автоматически 'jsp\scss' (все перед глобусом *).Который удаляется, поэтому нам больше не нужно беспокоиться о папке scss.Итак, какую структуру папок вы хотите: 'jsp/out/css'

[Кроме того, вы выбрали базу, которая не является частью структуры каталогов файла - мне это кажется странным (если не незаконным).Цель base состоит в том, чтобы позже указать в src, какую структуру папок использовать ПОСЛЕ базы, не включая базу.

Так, например, если вы используете базу из 'jsp', вы получите структуру папок-потомков.«СКС / и т.д.».следуя тому, что вы положили в gulp.dest, который будет действовать как родительский каталог.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...