Почему gulp.watch не запускается на компьютере windows, когда тот же код выполняется на других компьютерах windows? - PullRequest
1 голос
/ 29 апреля 2020

Я помогаю удаленному сотруднику настроить 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

...