Я хочу скомпилировать main. css для нескольких тем. У меня есть два ресурса для каждой темы. Ядро CSS и тема CSS размещены в разных папках. Поэтому я копирую файлы ядра и темы s css в l oop во временную папку /. Tmp , а затем запускаю задачу sass для компиляции main. css . Но я всегда получаю сообщение об ошибке «Файл не найден» (см. Ниже), хотя файл main.s css скопирован и существует. Он должен запускаться последовательно, и я также попытался использовать обещания, чтобы убедиться, что файлы скопированы. Задача стили запускается после завершения «coreStylesAll» и «themeStylesAll».
В конце я получаю это сообщение об ошибке:
Ошибка: файл не найден с сингулярным глобусом: C: / www / _dev-env / .tmp / web / scss / main.s css (если это было намеренно, используйте параметр allowEmpty
)
Папка структура
/src
/core
/scss
/themes
/theme1
/scss
/theme2
/scss
gulpfile. js
const themesPath = 'src/themes';
const folders = getFolders(themesPath);
function coreStyles() {
return new Promise((resolve, reject) => {
folders.map(function(folder) {
resolve( src( 'src/core/scss/**/*')
.pipe( dest('.tmp/themes/'+ folder +'/scss') ) );
});
});
}
async function coreStylesAll() {
console.log('before promise call')
let result = await coreStyles();
console.log('promise resolved: ' + result);
return result;
}
function themeStyles() {
return new Promise((resolve, reject) => {
folders.map(function(folder) {
resolve( src( 'src/themes/'+ folder +'/scss/**/*')
.pipe( dest('.tmp/themes/'+ folder +'/scss') ) );
});
});
}
async function themeStylesAll() {
console.log('before promise call')
let result = await themeStyles();
console.log('promise resolved: ' + result);
return result;
}
function styles() {
folders.map(function(folder) {
src('.tmp/themes/'+ folder +'/scss/main.scss')
.pipe($.plumber())
.pipe($.sass.sync({
outputStyle: 'expanded',
precision: 10,
includePaths: ['.']
}).on('error', $.sass.logError))
.pipe(dest('build/webs/'+ folder +'/styles')
);
});
}
const build = series(
// tasks ...
themeStylesAll,
coreStylesAll,
styles,
// tasks ....
);
ОБНОВЛЕНИЕ
.on('end', resolve)
кажется правильным решением.
function coreStyles(folder) {
return new Promise((resolve, reject) => {
src( 'src/core/scss/**/*')
.pipe( dest('.tmp/themes/'+ folder +'/scss') )
.on('end', resolve)
.on('error', reject);
});
}
function coreStylesAll() {
console.log('before promise call');
let result = folders.map(folder => coreStyles(folder));
console.log('next step');
return Promise.all(result);
}