Node.js: wie gebe ich einer globalen variable in eine Datei eingefügt werden durch require()?
Habe ich spaltete meine gulpfile.js
in mehrere Dateien in einem /gulp
Ordner zum organisieren der code ein wenig besser. Aber jetzt will ich übergeben Sie eine variable debug (boolean)
in den Dateien, Schaltverhalten des gulp-Befehl aufgenommen wird (schließlich werde ich verwenden Kommandozeilen-Argumente, aber für jetzt möchte ich nur machen, damit es funktioniert mit einer Variablen).
Dem Weg habe ich dieses setup, mit einer Methode, die ich sah in einem yeoman eckig/gulp-Paket, ist mit einem npm-Modul namens require-dir
(die lädt alle *.js-Dateien in der /gulp
Ordner, wo jeder hat eine Reihe von gulp Aufgaben, die festgelegt sind).
gulpfile.js:
var gulp = require('gulp'),
run = require('run-sequence'),
debug = true;
require('require-dir')('./gulp');
gulp.task('default', ['build', 'server', 'watch', '...']);
Dem laden würde so etwas wie...
gulp/build.js:
var gulp = require('gulp'),
plumber = require('gulp-plumber'),
...;
gulp.task('build', function () {
console.log(debug);
});
So, wenn ich den Befehl ausführen gulp
, läuft die default
Aufgabe, wird es zu laden build.js und dann führen Sie die build
Schluck Aufgabe. Aber leider, es scheint, dass debug
gibt Sie undefined zurück.
Wie bekomme ich diese zu arbeiten?
War ich auf der Suche mit nur module.exports()
und Knoten require()
Methode, aber ich konnte nicht herausfinden, wie man die gulp-task innerhalb der include-Datei deklariert, so dass es dann von der Haupt - gulpfile.js
- Datei (in der gewünschten Reihenfolge).
Kann mir jemand etwas Hilfe? Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den normalen Modul-Art und Weise, wirklich. Nur ändern
gulp/build.js
Datei aus eigentlich nicht alles exportieren, um eine ordnungsgemäße erfordern-können Modul:und dann rufen Sie in der main-Datei:
loadGulp()
Methode, die gulp-task registriert werden soll, also dann sollte ich in der Lage zu laufengulp.start('build')
und es verfügbar sein wird...?require('require-dir/gulp')
Betrieb lädt jetzt eine Funktion, und ausgeführt, dass die Funktionen jetzt meldet die gulp-task, nach dem es kann aufgerufen werden wie jede andere.require('gulp/build.js');
stattvar build = require('gulp/build.js')
?require('./gulp/build')(debug);
funktioniert gut, aber sieht irgendwie merkwürdig aus, so dass Sie wahrscheinlich wollen, ändern Sie das Modul.exportiert ein Objekt wieder{ loadTask: function(debug) { ... } };
statt, so dass Ihr Haupt-code-Aufruf sieht wierequire('./gulp/build').loadTask(debug);
statt. Schöner in Ihren Augen, und sinnvoller als ein code nennen.require('./gulp/build').loadTask(debug);
sieht nett aus! Vielen Dank für Ihre Hilfe!Node.js bietet eine einzige Globale variable mit dem Namen
global
die ist in der Tat, die gleiche Instanz in allen Modulen (im Gegensatz zumodule
was ist anders in jedem Modul). Durch einstellen der Werte aufglobal
Sie wirklich global geworden. Als zusätzlichen bonus, müssen Sie nicht die Präfix-Zugriff auf Globale Variablen mitglobal.
. Beideglobal.foo
und nurfoo
gleichwertig sind, so lange wie Sie nicht über eine andere variable namensfoo
im Rahmen.Ich erstelle einfach ein Objekt mit allen Variablen, die in es, dass ich den export als Modul, damit ich es verwenden kann, während alle meine task-Dateien. Zum Beispiel
js/tasks/variables.js
js/tasks/sass.js
js/tasks/build.js
/gulpfile.js
Dann können Sie die get - /set-Variablen von überall: