Глоток: ненормальное поведение программы - PullRequest
0 голосов
/ 15 декабря 2018

Я новичок в Gulp и у меня проблема с gulp, вот некоторые моменты, которые я хочу выполнить

  • Я хочу найти файл срасширение .storyboard ( оно уже ВЫПОЛНЕНО )

  • Я хочу выполнить задачу при изменении содержимого определенного файла,

  • Я хочу Смотреть этот файл, и когда что-то изменяется в этом файле

  • Я хочу переписать его содержимое с помощьюудаляя все остальное содержимое, которое уже было в файле.

Когда я делаю изменения в файле с расширением .storyboard , он просто продолжает отображать сообщение готово, файлбыл сохранен

Вот мой код:

//fs to read and write files while path is for iterating directories
fs = require('fs'),
    path = require('path')
//DomParser to Parse Xml 
var DOMParser = new (require('xmldom')).DOMParser({ normalizeTags: { default: false } });

//Gulp for detecting changes
var gulp = require('gulp')

var mainStoryBoardFile;

function crawl(dir) {
    // console.log('[+]', dir);
    var files = fs.readdirSync(dir);
    for (var file in files) {

        var next = path.join(dir, files[file]);
        //iterate through files to check whether next is a file or direcory
        if (fs.lstatSync(next).isDirectory()) {
            //if its a directory dive into it
            crawl(next);
        } else if (next.indexOf('.storyboard') >= 0) {
            //if its a file just check it whether it is a .storyboard file or not
            mainStoryBoardFile = next;
            mainStoryBoardFile = mainStoryBoardFile.replace(/\\/g, "/");
        };
    }
}
//calling function
crawl(__dirname);

var newFilePath = './data.xml'
var document;
var dataFound;
//What to do
gulp.task('read', function (done) {
    dataFound = fs.readFileSync(mainStoryBoardFile, "utf-8");
    document = DOMParser.parseFromString(
        dataFound.toString()
    );
    done();
});

gulp.task('write', function (done) {
    fs.writeFile(mainStoryBoardFile, '', function () { console.log('done') })
    fs.writeFile(mainStoryBoardFile, document, (err) => {
        if (err) throw err;
        console.log('The file has been saved!');
    });

    done();
});
gulp.task('watch', function (done) {
    gulp.watch(mainStoryBoardFile, gulp.series('read', 'write'));

});

1 Ответ

0 голосов
/ 05 января 2019

Вот решение для решения этой проблемы. Вы можете наблюдать за изменениями в одном файле, а также выполнять какую-либо функцию при каждом изменении файла.в случае xml вы можете просматривать файл, при его изменении вы можете добавлять новые свойства или атрибуты или создавать новые элементы в xml-файле.

//Dependencies
//fs to read and write files while path is for iterating directories
var fs = require('fs'),
    path = require('path'), 
    DOMParser = new (require('xmldom')).DOMParser({ normalizeTags: { default: false } }),
    gulp = require('gulp'),
    arrayOfControls = require('./object.json'),
    RandExp = require('randexp');


console.log("GulpService has been Started\n");

function crawl(dir) {
    var files = fs.readdirSync(dir);
    for (var file in files) {

        var next = path.join(dir, files[file]);
        //iterate through files to check whether next is a file or direcory
        if (fs.lstatSync(next).isDirectory()) {
            //if its a directory dive into it
            crawl(next);
        } else if (next.indexOf('.storyboard') >= 0) {
            //if its a file just check it whether it is a .storyboard file or not
            mainStoryBoardFile = next;
            mainStoryBoardFile = mainStoryBoardFile.replace(/\\/g, "/");
        }
    }
}
//calling function
crawl(__dirname);
var mainStoryBoardFile;
var document, dataFound;


function readWrite() {
    crawl(__dirname);
    dataFound = fs.readFileSync(mainStoryBoardFile, "utf-8");
    document = DOMParser.parseFromString(
        dataFound.toString()
    );
    fs.writeFileSync(mainStoryBoardFile, '', function () {
        console.log('done')
    });
    fs.writeFileSync(mainStoryBoardFile, document, (err) => {
        if (err) throw err;
        console.log('The file has been saved!');
    });
}
var watcher = gulp.watch(mainStoryBoardFile);
watcher.on('change', function (path, stats) {
    readWrite();
    console.log('File ' + path + ' was changed');
    watcher.unwatch(mainStoryBoardFile);
    watcher.add(mainStoryBoardFile);
});
...