Я помогаю удаленному сотруднику настроить gulp на их Windows 10 компьютере и столкнулся с проблемой, из-за которой функция наблюдения в gulp просто не будет работать.
Другие функции gulp работают хорошо , но, в частности, часы просто зависают без ошибок на экране.
Чтобы убедиться, что я ничего не пропускаю в своем коде, я сделал простой тестовый gulpfile, чтобы убедиться, что это не связано с каким-то другим причина.
gulpfile. js
var gulp = require("gulp");
var fs = require('fs');
var compareToPreviousRead = require("./fileReaderTest.js");
gulp.task("watch", function(){
return gulp.watch("Test.txt", async function(){
var diff = await compareToPreviousRead();
console.log(`Diff: "${diff}", Time: "${new Date().toGMTString()}"`);
Promise.resolve(true);
});
});
fileReaderTest. js
var fs = require('fs');
var readTestFile = () => new Promise(resolve => {
fs.readFile('Test.txt', 'utf8', (err, contents) => resolve(contents));
});
var originalValue = "";
var compareToPreviousRead = () => new Promise(resolve => {
readTestFile().then(updatedValue => {
var diff = updatedValue.replace(originalValue, "");
originalValue = updatedValue;
resolve(diff);
});
});
module.exports = compareToPreviousRead
Я также включил несколько скриптов PowerShell для установки и запуска приложения из одного каталога. Кто-то может также просто вручную отредактировать файл с именем «Test.txt» в том же каталоге (только добавление к файлу), и задача gulp будет работать правильно.
WriteToFileEverySecond.ps1
param ($testFileLocation)
Start-Sleep -Seconds 1
$i = 0
for ($i=0; $i -lt 10; $i++){
[System.IO.File]::AppendAllText($testFileLocation, "$i--", [System.Text.Encoding]::Ascii)
Start-Sleep -Seconds 1
}
TestGulpWatch.ps1
$currDir = $PSScriptRoot
cd $currDir
npm install --silent
Remove-Item "$currDir/Test.txt" -ErrorAction SilentlyContinue > $null
New-Item "Test.txt" -ItemType File > $null
$job1 = Start-Job -ScriptBlock {
param($currDir)
cd $currDir
gulp watch --silent
} -ArgumentList $currDir
Start-Sleep -Seconds 1
$job2 = Start-Job -FilePath "$currDir/WriteToFileEverySecond.ps1" -ArgumentList "$currDir/Test.txt"
while ($job1.HasMoreData -and $job2.HasMoreData) {
$job1,$job2 | Receive-Job
}
$job1,$job2 | Stop-Job
$job1,$job2 | Remove-Job
pause
Используются следующие версии: npm: 6.13.1 gulp cli версия: 2.2.0 версия репо gulp: 4.0.2