#gulp #gulp-imagemin
Вопрос:
Я использую Gulp (CLI: 2.3.0; Локальный: 4.0.2) для своего рабочего процесса. Я добавил в gulpfile функцию imagemin для уменьшения изображений, но когда я хочу запустить свою задачу, она выдает ошибку:
-> gulp
[10:56:11] Using gulpfile ~/dev/adm-servis-landing-page/gulpfile.js
[10:56:11] Starting 'default'...
[10:56:11] Starting 'compileSCSS'...
[10:56:11] Finished 'compileSCSS' after 396 ms
[10:56:11] Starting 'minifyJS'...
[10:56:11] Finished 'minifyJS' after 51 ms
[10:56:11] Starting 'imageOptimze'...
[10:56:12] 'imageOptimze' errored after 603 ms
[10:56:12] Error: EROFS: read-only file system, mkdir '/dist'
[10:56:12] 'default' errored after 1.07 s
Интересно то, что другие задачи gulp могут создавать /удалять папку и могут записывать в нее, функция imagemin не может. Я уже перепробовал все, что нашел на stackoverflow, но ни одна из этих вещей не работает для меня.
У кого-нибудь есть какое-то решение этой проблемы?
ОС: Mac OS Big Sur 11.4
npm: 7.20.2
Узел: 14.7.1
пакет.json:
"devDependencies": {
"browser-sync": "^2.27.5",
"gulp": "^4.0.2",
"gulp-autoprefixer": "^8.0.0",
"gulp-clean-css": "^4.3.0",
"gulp-imagemin": "^7.1.0",
"gulp-sass": "^5.0.0",
"gulp-terser": "^2.0.1",
"gulp-webp": "^4.0.1",
"sass": "^1.36.0"
}
глотательный файл:
'use strict';
const { src, series, dest, watch } = require('gulp');
const browsersync = require('browser-sync').create();
const sass = require('gulp-sass')(require('sass'));
const prefix = require('gulp-autoprefixer');
const minify = require('gulp-clean-css');
const terser = require('gulp-terser');
const imagemin = require('gulp-imagemin');
const imagewebp = require('gulp-webp');
const browserSync = require('browser-sync');
function compileSCSS() {
return src('src/scss/main.scss')
.pipe(sass())
.pipe(prefix())
.pipe(minify())
.pipe(dest('dist/css'));
}
function minifyJS() {
return src('src/js/*.js').pipe(terser()).pipe(dest('dist/js'));
}
function imageOptimze() {
return src('src/img/*.{jpg, png}')
.pipe(
imagemin([
imagemin.mozjpeg({ quality: 80, progressive: true }),
imagemin.optipng({ optimizationLevel: 2 }),
])
)
.pipe(dest('/dist/images'));
}
function webpImage() {
return src('dist/images/*.{jpg, png}')
.pipe(imagewebp())
.pipe(dest('/dist/images'));
}
function browsersyncServe(cb) {
browsersync.init({
server: {
baseDir: '.',
},
});
cb();
}
function browsersyncReload(cb) {
browsersync.reload();
cb();
}
function watchTask() {
watch('*.html', browsersyncReload);
watch(
['src/scss/**/*.scss', 'src/js/**/*.js'],
series(compileSCSS, minifyJS, browsersyncReload)
);
watch('src/img/*.{jpg,png}', series(imageOptimze, browsersyncReload));
watch('dist/images/*.{jpg,png}', series(webpImage, browsersyncReload));
}
// function taskWatch() {
// watch('/src/*.html', browsersyncReload);
// }
exports.default = series(
compileSCSS,
minifyJS,
imageOptimze,
webpImage,
browsersyncServe,
watchTask
);
Ответ №1:
Через час я обнаружил проблему.
В моей функции imagemin у меня была:
.pipe(dest('/dist/images'));
И решение в том, что я удалил /
до dist/изображений, так что с этим все работает:
.pipe(dest('dist/images'));