node.js

Gulp Tutorial: Ordner rekursiv überwachen und LINE-Benachrichtigungen senden

Shou Arisaka
5 Min. Lesezeit
11. Okt. 2025

Ich habe gulp von der Installation und grundlegenden Verwendung bis zur rekursiven Überwachung von Ordnern und dem Senden von LINE-Benachrichtigungen bei Änderungen ausprobiert.

Die Verwendung von contacam zur Bewegungserkennung, Videoaufzeichnung und automatischen Sicherung auf einen Remote-Server funktioniert gut als einzelner Prozess. Allerdings wollte ich "sofortige Benachrichtigung" hinzufügen, also habe ich mich entschieden, gulp zu verwenden, das ich zuvor nur einmal benutzt hatte.

Für diejenigen, die Gulp schnell zum Laufen bringen möchten

Bitte beziehen Sie sich auf das folgende Shell-Skript.

mkdir gulp_dev; cd gulp_dev

npm install -g gulp # Nur beim ersten Mal.

npm install -D gulp # or npm install --save-dev gulp # Bei Verwendung von Plugins verwenden Sie npm install --save-dev gulp-uglify so.
npm init -y # create package.json
cat << EOT > gulpfile.js

var gulp = require("gulp");

gulp.task("change", function() {
  console.log("変更されたよ")
});

gulp.task("watch", function() {
  var targets = [
    './*'
  ];
  gulp.watch(targets, ['change']);
});

EOT

gulp watch

# Versuchen Sie, eine Datei im gulp_dev-Ordner zu ändern und zu speichern

# =>
# => [14:32:36] Finished 'change' after 317 μs
# => [14:32:38] Starting 'change'...
# => 変更されたよ
# => [14:32:38] Finished 'change' after 88 μs
# => [14:33:17] Starting 'change'...
# => 変更されたよ

Skript-Erklärung

Davor, wenn Sie Node.js noch nicht installiert haben, installieren Sie es: sudo apt install -y nodejs

mkdir gulp_dev; cd gulp_dev

Geben Sie den Projektordner an, in dem Sie Dateien überwachen möchten. Diesmal habe ich einen neuen erstellt.

npm install -g gulp # Nur beim ersten Mal.

Installieren Sie gulp im System.

npm install -D gulp # or npm install --save-dev gulp # Bei Verwendung von Plugins verwenden Sie npm install --save-dev gulp-uglify so.

Installieren Sie gulp lokal.

npm init -y # create package.json

Erstellen Sie package.json, eine Konfigurationsdatei, die zum Ausführen von gulp erforderlich ist.

cat << EOT > gulpfile.js
#scripts
EOT

Erstellen Sie gulpfile, die Hauptskriptdatei für gulp. Bearbeiten Sie diese, um gulp und Plugins auszuführen.

Fehler

root@DESKTOP-UHU8FSH:/mnt/c/pg/gulp# gulp
[14:04:31] Warning: gulp version mismatch:
[14:04:31] Global gulp is 3.9.1
[14:04:31] Local gulp is 1.0.0
module.js:538
    throw err;
    ^

Error: Cannot find module 'gulp'
    at Function.Module._resolveFilename (module.js:536:15)
    at Function.Module._load (module.js:466:25)
    at Module.require (module.js:579:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/mnt/c/pg/gulp/gulpfile.js:1:74)
    at Module._compile (module.js:635:30)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)

Dieser Fehler tritt auf, wenn Sie npm install -D gulp nicht ausgeführt haben.

Ich habe etwa 30 Minuten mit diesem Fehler verbracht.

root@DESKTOP-UHU8FSH:/mnt/c/pg/gulp# npm install -D gulp
npm ERR! code ENOSELF
npm ERR! Refusing to install package with name "gulp" under a package
npm ERR! also called "gulp". Did you name your project the same
npm ERR! as the dependency you're installing?
npm ERR!
npm ERR! For more information, see:
npm ERR!     <https://docs.npmjs.com/cli/install#limitations-of-npms-install-algorithm>

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-02-10T05_09_54_461Z-debug.log

Dieser Fehler scheint aufzutreten, wenn der Ordnername "gulp" ist.

Ich konnte die Antwort nicht durch Recherche finden, aber es wurde "same" erwähnt, also habe ich versucht, den Arbeitsordner in etwas wie gulp_dev umzubenennen, und es funktionierte.

Befehle mit Gulp ausführen

Sie können auch Bash-Befehle innerhalb von gulp ausführen. Verwenden Sie das child_process-Plugin.

npm install child_process

Das Folgende ist ein Beispiel für die Verwendung von gulp watch zur rekursiven Überwachung von Ordnern. Bei Änderungen wird wie oben zu stdout ausgegeben und der Befehl pwd ausgeführt. Sie können den Betrieb mit gulp child_process_sample bestätigen.

var gulp = require("gulp");
var ps = require('child_process').exec;

gulp.task("change", function() {
  console.log("変更されたよ")
});

gulp.task('child_process_sample', function() {
  var command = "pwd"; //Führen Sie ein Skript aus, um E-Mails zu senden oder Musik für contacam abzuspielen
  ps(command , function (err, stdout, stderr) {
    console.log(stdout);
  });
});

gulp.task("watch", function() {
  var targets = [
    './*/*/*/*/*/*',
    './*/*/*/*/*',
    './*/*/*/*',
    './*/*/*',
    './*/*',
    './*'
  ];
  gulp.watch(targets, ['change','child_process_sample']);
});

Gulp-Skript zur rekursiven Ordnerüberwachung und zum Senden von LINE bei Änderungen

Verwenden Sie die Line notify API, um LINE-Nachrichten zu senden. Ersetzen Sie YOURLINEAPIKEY und verwenden Sie es.

Es ist ziemlich erzwungene Rekursion (physisch), aber ich konnte durch Recherche keinen Weg finden, es rekursiv zu tun, also denke ich, dass es vielleicht nicht möglich ist. Diese Methode funktioniert gut, es sei denn, Sie haben extrem verschachtelte Strukturen. Wenn es einen Weg gibt, würde ich mich freuen, wenn Sie es mir in den Kommentaren mitteilen könnten.

var gulp = require("gulp");
var ps = require('child_process').exec;

gulp.task("change", function() {
  console.log("変更されたよ")
});

gulp.task('child_process_sample', function() {
  var command = "pwd"; //
  ps(command , function (err, stdout, stderr) {
    console.log(stdout);
  });
});

gulp.task('send_line', function() {
  var command = "curl https://notify-api.line.me/api/notify -X POST -H 'Authorization: Bearer <YOURLINEAPIKEY>' -F 'message=ファイルの変更がありました。 by gulp'"; /
  ps(command , function (err, stdout, stderr) {
    console.log(stdout);
  });
});

gulp.task('send_mail', function() {
  var command = ""; //Führen Sie ein Skript aus, um E-Mails zu senden oder Musik für contacam abzuspielen
  ps(command , function (err, stdout, stderr) {
    console.log(stdout);
  });
});

gulp.task("watch", function() {
  var targets = [
    './*/*/*/*/*/*',
    './*/*/*/*/*',
    './*/*/*/*',
    './*/*/*',
    './*/*',
    './*'
  ];
  gulp.watch(targets, ['change','send_line']);
});

Update: Ich habe herausgefunden, wie man es rekursiv macht.

Sie können es so mit ** machen.

var targets = [
  // './*/*/*/*/*/*',
  // './*/*/*/*/*',
  // './*/*/*/*',
  // './*/*/*',
  // './*/*',
  './**'
];

Bei der Konvertierung von sass können Sie, auch wenn Ordnernamen wie /sass, src oder assets unterschiedlich sind oder sogar mit zwei Ordnern wie /src/sass, alle .sass-Dateien in allen Ordnern mit /**/*.sass ansprechen, daher ist diese Notation praktisch.

Gulp-Skript zur rekursiven Ordnerüberwachung und zum Senden von E-Mails bei Änderungen

Ich konnte das nicht zum Laufen bringen.

Ich habe versucht, den mail-Befehl und Python-E-Mail-Versand zu verwenden, aber nur Fehler erhalten...

Da Sie nur den Befehl direkt einbetten müssen, sollten diejenigen, die es können, es versuchen. Ich werde einen Artikel schreiben, wenn ich es löse.

Tatsächlich wäre das Empfangen von E-Mails vielseitiger und breiter anwendbar, aber ich verwende LINE notify, weil ich es nicht zum Laufen bringen konnte. Wenn Sie mit demselben Problem zu kämpfen haben, empfehle ich LINE notify.

Referenzen

http://phiary.me/gulp-watch/

Diesen Artikel teilen

Shou Arisaka 11. Okt. 2025

🔗 Links kopieren