Файл не найден после копирования в предыдущей задаче серии GULP - PullRequest
0 голосов
/ 05 августа 2020

Я хочу скомпилировать 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); 
}
...