Heim >Web-Frontend >js-Tutorial >So übergeben Sie die Befehlszeilenparameter an Schlupfaufgaben

So übergeben Sie die Befehlszeilenparameter an Schlupfaufgaben

Christopher Nolan
Christopher NolanOriginal
2025-02-17 10:32:10664Durchsuche

How to Pass Command Line Parameters to Gulp Tasks

Kernpunkte

    Die Einfachheit von gulp.js ist eine der attraktivsten Funktionen, mit der Entwickler Aufgabenfunktionen in
  • schreiben und aus der Befehlszeile ausführen können. Es unterstützt jedoch nicht, dass die Befehlszeilenparameter für die Verwendung von Aufgaben zur Verwendung von Aufgaben. gulpfile.js
  • Während Gulp -Aufgaben normalerweise keine Parameter erfordern, können Parameter in einigen Fällen nützlich sein. Wenn Sie beispielsweise FTP-Anmeldeinformationen als Parameter übergeben, können Sie die Sicherheit verbessern und hartcodierte sensible Informationen verhindern.
  • Die Eigenschaft
  • in
  • node.js gibt ein Array zurück, das den Vorgang, die Skript und alle Befehlszeilenparameter enthält. Dieses Array kann in process.argv analysiert werden, um ein Objekt zu erstellen, das Parameterwerte enthält. gulpfile.js
  • Während Gulp -Aufgaben nicht immer empfangen werden, ist dies in einigen Fällen sehr nützlich. Parameter-Parsen-Code kann in jedem Befehlszeilungsvorgang von Node.js verwendet werden, und das Commander-Modul bietet leistungsstärkere Funktionen für Nicht-Gulp-Projekte.
Ich mag Gulp.js sehr, und eine kürzlich durchgeführte Umfrage zeigt, dass fast 44% der Front-End-Entwickler Gulp-Aufgaben verwenden.

Die Einfachheit von

Gulp ist eine der attraktivsten Merkmale. Sie können Aufgabenfunktionen in

: gulpfile.js schreiben

<code class="language-javascript">gulp.task('doSomething', () => {
  // 执行某些操作
});</code>
Verwenden Sie dann

, um die Aufgabe aus der Befehlszeile auszuführen. Aufgaben können so einfach oder komplex sein, wie Sie möchten, und können weitere Unteraufgaben enthalten. gulp doSomething

Es ist jedoch unmöglich, Befehlszeilenparameter zu übergeben, die in dieser Aufgabe verwendet werden können, wie z. B.

<code class="language-bash">gulp doSomething --option1 "my string" --option2 123 --option3</code>
(wobei

gleich option3) true gleich

Diese Parameter werden an die Gulp -Anwendung selbst übergeben, nicht an Ihre Aufgabe. Gulp versteht diese Werte nicht, daher sind sie in

nicht verfügbar und können nicht in Ihren Aufgabenfunktionen überprüft oder verwendet werden. gulpfile.js

Benötigen Gulp -Aufgaben Parameter?

Es ist normalerweise nicht notwendig - sonst würde die Funktion des Übergebens von Parametern an Aufgaben vor Jahren hinzugefügt! Gulp -Aufgaben sind in JavaScript geschrieben, sodass Sie Standardwerte in Ihrem Code festlegen können.

Sie können auch Umgebungsvariablen analysieren, z. B.

. Sie können beispielsweise überprüfen, ob der Wert auf der Produktion oder ähnlich auf dem Live -Server eingestellt ist. Diese Einstellung kann dann verwendet werden, um festzustellen, ob die JavaScript -Quelldatei während der Ausführung der Aufgabe verkleinert werden soll, z. B. NODE_ENV

<code class="language-javascript">// 这是开发版本吗?
const devBuild = ((process.env.NODE_ENV || 'development').trim().toLowerCase() === 'development');

// Gulp 插件
const stripdebug = require('gulp-strip-debug');  // 删除调试代码
const uglify = require('gulp-uglify');           // 压缩

// 构建 JavaScript
gulp.task('js', () => {
  let jsbuild = gulp.src('src/js/*')
    .pipe(some-plugin1())
    .pipe(some-plugin2());

  // 生产服务器任务
  if (!devBuild) {
    jsbuild = jsbuild
      .pipe(stripdebug())
      .pipe(uglify());
  }

  return jsbuild.pipe(gulp.dest('build/js/'));
});</code>
Sie können jetzt

auf Linux/Mac oder gulp js unter Windows einstellen, bevor Sie die export NODE_ENV=production -Angabe ausführen. Anschließend löscht es die Anweisungen NODE_ENV=production und console.log, bevor die JavaScript -Datei komprimiert wird. debugger

Schließlich können Sie eine neue Aufgabe erstellen, wenn die Aufgabe leicht unterschiedliche Aktionen ausführen soll. Aufgaben können miteinander verknüpft werden, um nach Bedarf nach Bedarf zu laufen, z. B.

<code class="language-javascript">gulp.task('doSomething', () => {
  // 执行某些操作
});</code>

run gulp doSomething1 Die erste Aufgabe wird ausgeführt. Durch Ausführen von gulp doSomething2 wird beide Aufgaben in der Reihenfolge ausführen, da doSomething1 nach dem Aufgabenamen als Abhängigkeit in einem optionalen Array definiert ist.

Sollten wir Parameter betrachten?

Vermeiden Sie die Verwendung von Parametern, wenn es bessere Alternativen gibt. Ihr Parameter --option1 kann in der nächsten Gulp-Version mit nachteiligen Folgen zu einer gültigen Befehlszeilenoption werden.

Mit anderen Worten, es gibt immer einige besondere Umstände ...

1.

Sie sollten im Allgemeinen Festplattenanmeldeinformationen wie IDs und Passwörter in

vermeiden. Betrachten Sie die folgende Aufgabe, die das Vinyl-Fftp-Plugin verwendet, um Dateien auf dem Server bereitzustellen: gulpfile.js

<code class="language-bash">gulp doSomething --option1 "my string" --option2 123 --option3</code>
(authentisch, FTP ist keine gute Möglichkeit zum Bereitstellen, aber viele Entwickler verwenden es immer noch, und es ist möglicherweise die einzige Option für einige Hosts.)

Es gibt mehrere Probleme mit dieser Methode:

    FTP -Host, Benutzer -ID, Kennwort und Pfad sind in der Datei fest investiert. Wenn der Code in einem öffentlichen Github -Repository gespeichert wird und von jedem angesehen, geklont und betrieben werden kann, kann dies zu Sicherheitsproblemen führen.
  1. Jeder Entwickler kann jederzeit von einem beliebigen Gerät
  2. aus ausgeführt. Dies ist nicht ideal für größere Teams, die die Bereitstellungszeit kontrollieren möchten. gulp deploy
  3. Wenn sich die Anmeldeinformationen ändern, müssen Sie manuell
  4. aktualisieren, um sicherzustellen, dass die Bereitstellungsaufgabe weiterhin gültig ist. gulpfile.js
2.

gulp kann für andere Zwecke als typische Website -Aufgaben verwendet werden. Zum Beispiel haben Sie möglicherweise einige gängige Aufgaben, um Ordner zu löschen, Datenbanken zu erstellen, Dateien zu übertragen und vieles mehr. Hartcodierte Inhalte wie Datenbank- oder Ordnernamen verringern die Praktikabilität dieser Aufgaben.

3

Stellen Sie sich eine komplexe Aufgabe vor, die Dutzende von Plugins umfasst. Wenn es nicht praktikabel ist, es in mehrere Unteraufgaben aufzuteilen, kann es schwierig werden,

direkt zu bearbeiten, um Konfigurationsoptionen hinzuzufügen, bevor die Aufgabe ausgeführt wird.

Sie können sich mehr besondere Umstände vorstellen (Kommentare sind willkommen!) gulpfile.js

wie Sie Parameter an Ihre Gulp.js -Aufgabe übergeben

Die Eigenschaft

in

node.js gibt ein Array zurück, das den Vorgang, die Skript und alle Befehlszeilenparameter enthält. Zum Beispiel gibt

das folgende Array zurück (Werte können je nach Betriebssystem und Einstellungen variieren):

process.argv gulp task1 --a 123 --b "my string" --c Dieses Array kann in

analysiert werden. Der folgende Code erstellt ein Objekt namens
<code class="language-javascript">// 这是开发版本吗?
const devBuild = ((process.env.NODE_ENV || 'development').trim().toLowerCase() === 'development');

// Gulp 插件
const stripdebug = require('gulp-strip-debug');  // 删除调试代码
const uglify = require('gulp-uglify');           // 压缩

// 构建 JavaScript
gulp.task('js', () => {
  let jsbuild = gulp.src('src/js/*')
    .pipe(some-plugin1())
    .pipe(some-plugin2());

  // 生产服务器任务
  if (!devBuild) {
    jsbuild = jsbuild
      .pipe(stripdebug())
      .pipe(uglify());
  }

  return jsbuild.pipe(gulp.dest('build/js/'));
});</code>
mit Parameterwerten:

gulpfile.js arg Diese Funktion schießt durch das Array

. Wenn es auf einen Wert stößt, der mit einem oder mehreren Strichen beginnt, erzeugt es einen neuen benannten Wert im
<code class="language-javascript">gulp.task('doSomething1', () => {
  return gulp.src('src/*')
    .pipe(some-plugin1())
    .pipe(gulp.dest('build/'));
});

// 首先运行 doSomething1
gulp.task('doSomething2', ['doSomething1'], () => {
  // 执行其他操作
  return gulp.src('src/*')
    .pipe(some-plugin2())
    .pipe(gulp.dest('build/'));
});</code>
-Objekt, der auf

festgelegt ist. Wenn es auf einen Wert ohne Dash trifft, wird der vorherige benannte Wert (falls verfügbar) auf die Zeichenfolge festgelegt. process.argv

Wenn wir gulp task1 --a 123 --b "my string" --c ausführen, wird das arg -Objekt auf:

gesetzt
<code class="language-javascript">gulp.task('doSomething', () => {
  // 执行某些操作
});</code>

Daher können wir diese Werte nach Bedarf überprüfen und verwenden.

Angenommen, arg wird oben in gulpfile.js eingestellt. Wir können unsere FTP -Bereitstellungsaufgabe umschreiben, damit wir übergeben können:

  • Benutzer -ID als --user oder --u Parameter
  • Passwort als --password oder --p Parameter
<code class="language-bash">gulp doSomething --option1 "my string" --option2 123 --option3</code>

Bereitstellung tritt nur auf, wenn wir die Aufgabe mit den entsprechenden FTP -Anmeldeinformationen ausführen, zum Beispiel:

<code class="language-javascript">// 这是开发版本吗?
const devBuild = ((process.env.NODE_ENV || 'development').trim().toLowerCase() === 'development');

// Gulp 插件
const stripdebug = require('gulp-strip-debug');  // 删除调试代码
const uglify = require('gulp-uglify');           // 压缩

// 构建 JavaScript
gulp.task('js', () => {
  let jsbuild = gulp.src('src/js/*')
    .pipe(some-plugin1())
    .pipe(some-plugin2());

  // 生产服务器任务
  if (!devBuild) {
    jsbuild = jsbuild
      .pipe(stripdebug())
      .pipe(uglify());
  }

  return jsbuild.pipe(gulp.dest('build/js/'));
});</code>

Zusammenfassung

Wie wir gesehen haben, können Parameter mit einer kleinen Menge benutzerdefinierter Code an Schluckaufgaben übergeben werden. Während Ihre Aufgabe normalerweise keine empfangenen Parameter erfordert, sehen wir, dass dies in einigen Fällen sehr nützlich ist. Dies ist definitiv eine gute Technik, die Sie in Ihrer Toolbox beherrschen sollten.

Parameter -Parsing -Code kann in jedem Befehlszeilungsvorgang von Node.js verwendet werden. Wenn Sie es jedoch in einem Nicht-Gulp-Projekt benötigen, bietet das Commander-Modul leistungsfähigere Funktionen.

Ich hoffe, Sie finden das nützlich. Nur weil Sie Parameter an Gulp -Aufgaben übergeben können, heißt das nicht, dass Sie dies tun sollten! Wenn Sie sich für diesen Ansatz mehr gute Anwendungsfälle einfallen lassen, lassen Sie es mich in den Kommentaren wissen.

Dieser Artikel wurde von Tim Severien überprüft. Vielen Dank an alle SitePoint -Peer -Rezensenten, die SidePoint -Inhalte für den Besten erhalten haben!

häufig gestellte Fragen zum Übergeben von Parametern an Gulp -Aufgaben (FAQ)

Wie übergeben Sie Parameter an Schlupfaufgaben aus der Befehlszeile?

Arrays können verwendet werden, um Parameter an Schlupfaufgaben aus der Befehlszeile zu übergeben. Dieses Array enthält die Befehlszeilenparameter, die beim Starten des Vorgangs node.js übergeben wurden. Die ersten beiden Elemente dieses Arrays sind der Pfad zum ausführbaren Node.js und der Pfad zur Gulp -Datei. In diesem Array werden alle anderen Parameter aus der dritten Position hinzugefügt. Sie können auf diese Parameter in der Gulp -Aufgabe zugreifen, indem Sie das

-Array indizieren. process.argv process.argv Kann ich Pakete verwenden, um Befehlszeilenparameter in Gulp zu verarbeiten?

Ja, Sie können Pakete wie Yargs oder Minimist verwenden, um die Befehlszeilenparameter in Gulp zu verarbeiten. Diese Pakete analysieren die Befehlszeilenparameter in leichter zu verwendende Formate, sodass sie in Gulp-Aufgaben einfacher zu verwenden sind. Wenn Sie beispielsweise Yargs verwenden, können Sie auf die Eigenschaften des

-Objekts als Befehlszeilenparameter zugreifen.

yargs.argv Wie verwendet ich Flags in Schluckaufgaben?

Das Flag kann von der Befehlszeile an die Gulp -Aufgabe übergeben werden, indem der Flag -Name vorgeht. Sie können beispielsweise das "Produktion" -Flag an eine Gulp -Aufgabe wie folgt übergeben:

. In Ihrer Gulp -Aufgabe können Sie überprüfen, ob dieses Flag über ein Paket wie

oder Yargs oder Minimist eingestellt ist. gulp build --production

Kann ich mehrere Parameter an eine Gulp -Aufgabe übergeben?

Ja, Sie können mehrere Parameter über die Befehlszeile übergeben. Diese Parameter werden dem process.argv -Array in der Reihenfolge hinzugefügt, in der sie übergeben werden. Sie können auf diese Parameter in der Gulp -Aufgabe zugreifen, indem Sie das process.argv -Array indizieren.

Wie verwendet ich Befehlszeilenparameter in Gulp -Aufgaben?

kann Befehlszeilenparameter in Gulp -Aufgaben verwenden, indem Sie auf process.argv Arrays oder Pakete wie Yargs oder Minimist zugreifen. Sie können diese Parameter verwenden, um das Verhalten von Gulp -Aufgaben zu steuern. Sie können beispielsweise das Flag "Produktion" verwenden, um den Code in einer Build -Aufgabe zu komprimieren.

Kann ich Umgebungsvariablen in Gulp -Aufgaben verwenden?

Ja, Sie können Umgebungsvariablen in Gulp -Aufgaben verwenden. Diese Variablen können über das process.env -Objekt zugegriffen werden. Dies ist nützlich, wenn Sie sensible Informationen wie API -Schlüssel an Schlupfaufgaben übergeben möchten, ohne sie in Befehlszeilenparametern zu enthüllen.

Wie kann man mit Fehlern in Schluckaufgaben umgehen?

mit dem .on('error') kann verwendet werden, um Fehler in Gulp -Aufgaben zu verarbeiten. Diese Methode nimmt eine Rückruffunktion auf, die aufgerufen wird, wenn ein Fehler auftritt. In dieser Rückruffunktion können Sie Fehler protokollieren und die Aufgabe beenden, um zu verhindern, dass Gulp zum Absturz ist.

Kann ich mehrere Gulp -Aufgaben in Ordnung ausführen?

Ja, Sie können mehrere Gulp -Aufgaben mit der gulp.series() -Methode ausführen. Diese Methode nimmt eine Reihe von Aufgabennamen an und führt sie in der definierten Reihenfolge aus.

Kann ich parallel mehrere Gulp -Aufgaben ausführen?

Ja, Sie können mehrere Gulp -Aufgaben parallel mit der gulp.parallel() -Methode ausführen. Diese Methode nimmt eine Reihe von Aufgabennamen an und führt alle gleichzeitig alle Aufgaben aus.

Wie kann man die Standard -Gulp -Aufgabe definieren?

Die Standard -Gulp -Aufgabe kann mithilfe der gulp.task() -Methode mit "Standard" als Aufgabename definiert werden. Diese Aufgabe wird ausgeführt, wenn Sie den Gulp -Befehl ohne Aufgabennamen ausführen. Sie können diese Aufgabe verwenden, um standardmäßig eine Reihe anderer Aufgaben auszuführen.

Das obige ist der detaillierte Inhalt vonSo übergeben Sie die Befehlszeilenparameter an Schlupfaufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn