Angenommen, ich habe eine Datei namens app.js. Ziemlich einfach:
var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index', {locals: {
title: 'NowJS + Express Example'
}});
});
app.listen(8080);
Was ist, wenn ich Funktionen in "tools.js" habe? Wie würde ich sie importieren, um sie in apps.js zu verwenden?
Oder ... soll ich "Werkzeuge" in ein Modul verwandeln und es dann benötigen? << scheint schwierig, ich mache lieber den Basisimport der Datei tools.js.
javascript
import
header
node.js
TIMEX
quelle
quelle
require
abschreckte, war ein Ordner im selben Verzeichnis unter Windows. Sie müssen die Adressierung im Unix-Stil verwenden:./mydir
statt einfach altmydir
.node_modules
Ordner einzuschließen. npmjs.com/package/node-import Hoffe, es kann helfen. Vielen Dank!Antworten:
Sie können jede js-Datei benötigen, Sie müssen nur deklarieren, was Sie verfügbar machen möchten.
Und in Ihrer App-Datei:
quelle
require("http://javascript-modules.googlecode.com/svn/functionChecker.js")
scheint das Modul nicht richtig zu importieren. Gibt es eine andere Möglichkeit, externe Skripte zu importieren?Wenn trotz aller anderen Antworten, möchten Sie noch traditionell umfassen eine Datei in einer node.js Quelldatei, können Sie diese verwenden:
+''
ist erforderlich, um den Dateiinhalt als Zeichenfolge und nicht als Objekt abzurufen (Sie können ihn auch verwenden,.toString()
wenn Sie dies bevorzugen).include()
Dienstprogrammfunktion oder ähnliches erstellen ).Bitte beachten Sie, dass dies in den meisten Fällen eine schlechte Praxis ist und Sie stattdessen ein Modul schreiben sollten . Es gibt jedoch seltene Situationen, in denen die Verschmutzung Ihres lokalen Kontexts / Namespace das ist, was Sie wirklich wollen.
Update 2015-08-06
Bitte beachten Sie auch, dass dies nicht funktioniert
"use strict";
(wenn Sie sich im "strengen Modus" befinden ), da der Code, der den Import ausführt, nicht auf Funktionen und Variablen zugreifen kann, die in der "importierten" Datei definiert sind . Der strikte Modus erzwingt einige Regeln, die in neueren Versionen des Sprachstandards definiert sind. Dies kann ein weiterer Grund sein, die hier beschriebene Lösung zu vermeiden .quelle
Sie benötigen weder neue Funktionen noch neue Module. Sie müssen lediglich das Modul ausführen, das Sie aufrufen, wenn Sie keinen Namespace verwenden möchten.
in tools.js
in app.js.
oder in anderen .js wie myController.js:
anstatt
var tools = require('tools.js')
die uns zwingen, einen Namespace zu verwenden und Tools wie aufzurufentools.sum(1,2);
wir können einfach anrufen
und dann
In meinem Fall habe ich eine Datei mit den Controllern ctrls.js
und ich kann
Categories
in jedem Kontext als öffentliche Klasse danach verwendenrequire('ctrls.js')()
quelle
this
in einer Funktion der globale Bereich ist, in dem die Funktion direkt aufgerufen wird (in keiner Weise gebunden).require('blah.js')();
sollten Erlaube mir, sie alle in den gleichen Bereich zu importieren !!! Vielen Dank!!!Erstellen Sie zwei JS-Dateien
Haupt-js-Datei
Konsolenausgabe
quelle
Hier ist eine einfache Erklärung:
Server.js Inhalt:
Helpers.js Inhalt:
quelle
Ich suchte auch nach einer NodeJS-Include-Funktion und überprüfte die von Udo G vorgeschlagene Lösung - siehe Nachricht https://stackoverflow.com/a/8744519/2979590 . Sein Code funktioniert nicht mit meinen enthaltenen JS-Dateien. Schließlich habe ich das Problem so gelöst:
Klar, das hilft.
quelle
Erstellen Sie zwei Dateien, z. B.
app.js
undtools.js
app.js.
tools.js
Ausgabe
quelle
sagen will , wir Funktion aufrufen ping () und fügen (30,20) , die in ist lib.js aus der Datei main.js
main.js
lib.js
quelle
Das vm-Modul in Node.js bietet die Möglichkeit, JavaScript-Code im aktuellen Kontext (einschließlich des globalen Objekts) auszuführen. Siehe http://nodejs.org/docs/latest/api/vm.html#vm_vm_runinthiscontext_code_filename
Beachten Sie, dass es ab heute einen Fehler im VM-Modul gibt, der verhindert, dass runInThisContext beim Aufrufen aus einem neuen Kontext das Richtige tut. Dies ist nur wichtig, wenn Ihr Hauptprogramm Code in einem neuen Kontext ausführt und dieser Code dann runInThisContext aufruft. Siehe https://github.com/joyent/node/issues/898
Leider funktioniert der von Fernando vorgeschlagene with (globale) Ansatz nicht für benannte Funktionen wie "function foo () {}".
Kurz gesagt, hier ist eine include () - Funktion, die für mich funktioniert:
quelle
Udo G. sagte:
Er hat Recht, aber es gibt eine Möglichkeit, den globalen Umfang einer Funktion zu beeinflussen. Sein Beispiel verbessern:
Ich hoffe, das hilft.
quelle
Es hat bei mir wie folgt funktioniert ....
Lib1.js
jetzt in der main.js Datei benötigen Sie einschließen Lib1.js
Bitte denken Sie daran, die Datei Lib1.js im Ordner node_modules abzulegen .
quelle
Sie können Ihre Funktionen in globale Variablen einfügen. Es empfiehlt sich jedoch, das Tool-Skript einfach in ein Modul umzuwandeln. Es ist wirklich nicht zu schwer - hängen Sie einfach Ihre öffentliche API an das
exports
Objekt an. Schauen Sie sich auf Verständnis Node.js Exporte Modul für etwas detaillierter.quelle
Eine andere Möglichkeit, dies zu tun, besteht meiner Meinung nach darin, alles in der lib-Datei auszuführen, wenn Sie die Funktion require () mit (function (/ * things here * /) {}) () aufrufen . Dadurch werden alle diese Funktionen global erweitert, genau wie bei eval () Lösung
src / lib.js.
Und dann können Sie in Ihrem Hauptcode Ihre Funktionen beim Namen nennen wie:
main.js
Wird diese Ausgabe machen
Pay atention zum undefined , wenn Sie meinen Anruf object.funcFour () , es wird das gleiche sein , wenn Sie mit laden eval () . Ich hoffe es hilft :)
quelle
Ich möchte nur hinzufügen, falls Sie nur bestimmte Funktionen benötigen, die aus Ihrer tools.js importiert wurden , können Sie eine Destrukturierungszuweisung verwenden, die in node.js seit Version 6.4 unterstützt wird - siehe node.green .
Beispiel : (beide Dateien befinden sich im selben Ordner)
Ausgabe:
true
Dadurch wird auch vermieden, dass Sie diese Funktionen als Eigenschaften eines anderen Objekts zuweisen, wie dies bei der folgenden (allgemeinen) Zuweisung der Fall ist:
const tools = require('./tools.js');
wo Sie anrufen müssen
tools.isEven(10)
.HINWEIS:
Vergessen Sie nicht, Ihrem Dateinamen den richtigen Pfad voranzustellen - auch wenn sich beide Dateien im selben Ordner befinden, müssen Sie ein Präfix verwenden
./
Aus Node.js Dokumenten :
quelle
app.js.
tools.js
quelle
Fügen Sie die Datei ein und führen Sie sie im angegebenen (nicht globalen) Kontext aus
fileToInclude.js
main.js
quelle
Dies ist der beste Weg, den ich bisher geschaffen habe.
Sie müssen noch mitteilen, was Sie exportieren möchten
quelle
Wie haben Sie eine Datei
abc.txt
und viele mehr?Erstellen 2 - Dateien:
fileread.js
undfetchingfile.js
dann in demfileread.js
Code schreiben:In
fetchingfile.js
Schreib diesen Code:Jetzt in einem Terminal: $ node fetchingfile.js --file = abc.txt
Sie übergeben den Dateinamen als Argument, schließen außerdem alle Dateien ein,
readfile.js
anstatt ihn zu übergeben.Vielen Dank
quelle
Sie können einfach nur
require('./filename')
.Z.B.
Bitte beachte, dass:
quelle
Ich suchte auch nach einer Option, um Code einzuschließen, ohne Module zu schreiben. Verwenden Sie dieselben getesteten eigenständigen Quellen aus einem anderen Projekt für einen Node.js-Dienst - und die Antwort von jmparatte hat es für mich getan.
Der Vorteil ist, dass Sie den Namespace nicht verschmutzen, ich habe keine Probleme damit
"use strict";
und es funktioniert gut.Hier ein vollständiges Beispiel:
Zu ladendes Skript - /lib/foo.js
SampleModule - index.js
Hoffe das war irgendwie hilfreich.
quelle
Eine andere Methode bei Verwendung des Frameworks node.js und express.js
Speichern Sie dies in einer JS-Datei mit dem Namen s und in der Ordnerstatik
Verwenden Sie nun die Funktion
quelle
Ich habe mir eine ziemlich grobe Methode ausgedacht, um dies für HTML-Vorlagen zu handhaben. Ähnlich wie bei PHP
<?php include("navigation.html"); ?>
quelle
Wenn Sie die Vorteile mehrerer CPUs und der Microservice-Architektur nutzen möchten, um die Arbeit zu beschleunigen ... Verwenden Sie RPCs über gegabelte Prozesse.
Klingt komplex, ist aber einfach, wenn Sie Octopus verwenden .
Hier ist ein Beispiel:
auf tools.js hinzufügen:
Fügen Sie in app.js Folgendes hinzu:
Offenlegung - Ich bin der Autor von Octopus und habe es für einen ähnlichen Anwendungsfall von mir gebaut, da ich keine leichtgewichtigen Bibliotheken finden konnte.
quelle
Um "Werkzeuge" in ein Modul zu verwandeln, sehe ich überhaupt nicht schwer. Trotz aller anderen Antworten würde ich die Verwendung von module.exports empfehlen:
Jetzt müssen wir diese Exporte dem globalen Bereich zuordnen (in Ihrer app | index | server.js).
Jetzt können Sie die Funktion wie folgt bezeichnen und aufrufen:
quelle
Verwenden:
app.js:
quelle
./tools.js