Советую не мучиться с галпом, с ним вечно какие-то проблемы были, фиг знает, как он там под капотом работает.
Пришел к тому, чтобы запускать подобные сборки просто как node js код. Абсолютный контроль над процессом и никаких непонятных глюков. Поначалу было сложновато, но зато никакой галп-магии, мы просто оперируем файлами. Если понадобится более сложная сборка, все равно придется в этом разобраться)
Код только для примера, в нем много лишнего.
Вот так создаем слушатель событий (у галпа под капотом тот же chokidar):
async function Default(cb) {
cl( chalk.black.bgGreen( "Default..." ) );
cl('\n');
var livereload_server = livereload.createServer();
let chokidar_settings = {
ignoreInitial: true,
usePolling: true,
interval: 200,
ignorePermissionErrors: true,
awaitWriteFinish: {
stabilityThreshold: 300,
pollInterval: 100
}
};
let process_css_path = [
'./project_www/assets/components/project/app2/scss/*.scss',
'./project_www/assets/components/project/test_360/scss/*.scss'
];
let process_css_path_ignored = [
];
let chokidar_settings_Process_CSS = {...chokidar_settings};
chokidar_settings_Process_CSS.ignored = process_css_path_ignored;
chokidar.watch( process_css_path, chokidar_settings_Process_CSS ).on('all', function (event, path) {
if( event == 'unlink' || event == 'unlinkDir' ) return;
Process_CSS(event, path);
path = path.replace('.scss', '.css');
path = 'D:/aera/' + path;
livereload_server.refresh( path );
});
А вот сама функция преобразования стилей:
function Process_CSS( event, path ){
cl( chalk.black.bgGreen( ` CSS Processing ${path} \n`) );
if( Fs.existsSync( path ) === false ){
cl( chalk.yellow( `Not exists: ${path} \n` ) );
return;
}
path = Path.resolve( path );
let scss_path = Path.dirname( path );
let scss_name = Path.parse( path ).name;
let out_css;
try{
out_css = sass.compile( path );
} catch(err){
cl( chalk.red( `${ err } \n` ) );
return;
}
out_css = out_css.css;
Fs.writeFileSync( scss_path + `/../css/${ scss_name }.css`, out_css, {encoding: 'utf8'} );
cl( chalk.black.bgGreen('...OK \n') );
};