Ist es möglich, require()
auf Client-Seite zu verwenden (oder etwas Ähnliches)?
Beispiel
var myClass = require('./js/myclass.js');
javascript
node.js
Debra Maddux
quelle
quelle
Ich habe dafür browserify verwendet . Außerdem kann ich Node.js-Module in meinen clientseitigen Code integrieren.
Ich habe hier darüber gebloggt : Fügen Sie node.js / CommonJS style require () zu clientseitigem JavaScript mit browserify hinzu
quelle
Wenn Sie den Node.js-Stil haben möchten, können Sie Folgendes
require
verwenden:Achtung: Dieser Code funktioniert, ist jedoch unvollständig (insbesondere beim Auflösen von URLs) und implementiert nicht alle Funktionen von Node.js (ich habe ihn erst letzte Nacht zusammengestellt). SIE SOLLTEN DIESEN CODE NICHT in echten Apps verwenden, aber es gibt Ihnen einen Ausgangspunkt. Ich habe es mit diesem einfachen Modul getestet und es funktioniert:
quelle
Ich habe mir die gleichen Fragen gestellt. Als ich es mir ansah, fand ich die Auswahl überwältigend.
Glücklicherweise habe ich diese hervorragende Tabelle gefunden, die Ihnen bei der Auswahl des besten Laders basierend auf Ihren Anforderungen hilft:
https://spreadsheets.google.com/lv?key=tDdcrv9wNQRCNCRCflWxhYQ
quelle
Schauen Sie sich das Projekt requirejs an .
quelle
Ich habe festgestellt, dass es im Allgemeinen empfohlen wird, Skripte zur Kompilierungszeit vorzuverarbeiten und sie in einem (oder sehr wenigen) Paketen zu bündeln, wobei sie
require
auch zur Kompilierungszeit in einen "Lightweight Shim" umgeschrieben werden.Ich habe nach "neuen" Tools gegoogelt, die dazu in der Lage sein sollten
Und das bereits erwähnte
browserify
sollte auch ganz gut passen - http://esa-matti.suuronen.org/blog/2013/04/15/asynchronous-module-loading-with-browserify/Worum geht es in den Modulsystemen?
Erklärung zum älteren Stapelüberlauf - Beziehung zwischen CommonJS, AMD und RequireJS?
Eine ausführliche Beschreibung der verschiedenen Modul-Frameworks und
require()
ihrer Anforderungen finden Sie in Addy Osmani - Schreiben von modularem JavaScript mit AMD, CommonJS und ES Harmonyquelle
Sie können Elemente im DOM erstellen, das Elemente lädt.
Wie solche:
quelle
Verwenden Sie einfach Browserify, einen Compiler, der Ihre Dateien verarbeitet, bevor sie in Produktion gehen, und die Datei in Bundles packt.
Stellen Sie sich vor, Sie haben eine main.js-Datei, für die die Dateien Ihres Projekts erforderlich sind. Wenn Sie browserify ausführen, werden einfach alle verarbeitet und ein Bundle mit all Ihren Dateien erstellt, sodass die
require
Aufrufe synchron im Browser ohne HTTP-Anforderungen und verwendet werden können Zum Beispiel mit sehr geringem Aufwand für die Leistung und die Größe des Bundles.Weitere Informationen finden Sie unter dem Link: http://browserify.org/
quelle
Einige Antworten bereits - aber ich möchte Sie auf YUI3 und das Laden des On-Demand-Moduls hinweisen. Es funktioniert sowohl auf dem Server (node.js) als auch auf dem Client. Ich habe eine Demo-Website, die genau denselben JS-Code verwendet, der entweder auf dem Client oder auf dem Server ausgeführt wird, um die Seiten zu erstellen, aber das ist ein anderes Thema.
YUI3: http://developer.yahoo.com/yui/3/
Videos: http://developer.yahoo.com/yui/theater/
Beispiel:
(Voraussetzung: Die grundlegenden YUI3-Funktionen in 7k yui.js wurden geladen)
Dieser Code lädt die YUI3-Module "node" und "io" sowie das Modul "own-app-module1" und führt dann die Rückruffunktion aus. Eine neue Sandbox "Y" mit allen Funktionen von YUI3 und own-app-module1 wird erstellt. Im globalen Namespace wird nichts angezeigt. Das Laden der Module (.js-Dateien) wird vom YUI3-Loader übernommen. Außerdem wird die Konfiguration (optional, hier nicht angezeigt) verwendet, um eine -debug- oder -min-Version (ified) der zu ladenden Module auszuwählen.
quelle
Hier ist eine Lösung, die einen ganz anderen Ansatz verfolgt: Packen Sie alle Module in ein JSON-Objekt und benötigen Sie Module, indem Sie den Dateiinhalt ohne zusätzliche Anforderungen lesen und ausführen.
https://github.com/STRd6/require/blob/master/main.coffee.md
STRd6 / require hängt davon ab, ob zur Laufzeit ein JSON-Paket verfügbar ist. Die
require
Funktion wird für dieses Paket generiert. Das Paket enthält alle Dateien, die Ihre App möglicherweise benötigt. Es werden keine weiteren http-Anforderungen gestellt, da das Paket alle Abhängigkeiten bündelt. Dies ist so nah wie möglich an dem Node.js-Stil, den der Client benötigt.Die Struktur des Pakets ist wie folgt:
Im Gegensatz zu Node kennt ein Paket seinen externen Namen nicht. Es ist Sache des Pakets, einschließlich der Abhängigkeit, es zu benennen. Dies bietet eine vollständige Kapselung.
Angesichts all dieser Einstellungen ist hier eine Funktion, die eine Datei aus einem Paket lädt:
Dieser externe Kontext bietet eine Variable, auf die Module Zugriff haben.
Eine
require
Funktion ist Modulen ausgesetzt, sodass sie möglicherweise andere Module benötigen.Zusätzliche Eigenschaften wie ein Verweis auf das globale Objekt und einige Metadaten werden ebenfalls angezeigt.
Schließlich führen wir das Programm innerhalb des Moduls aus und geben den Kontext an.
Diese Antwort ist besonders hilfreich für diejenigen, die einen synchronen node.js-Stil benötigen, der eine Anweisung im Browser erfordert und nicht an Lösungen zum Laden von Remote-Skripten interessiert ist.
quelle
Ich finde, dass das Komponentenprojekt einen wesentlich optimierten Workflow bietet als andere Lösungen (einschließlich require.js). Daher empfehle ich, https://github.com/component/component zu überprüfen . Ich weiß, dass dies eine etwas späte Antwort ist, aber für jemanden nützlich sein kann.
quelle
Hier ist eine einfache Möglichkeit, Anforderungen und Exporte in Ihrem Webclient zu verwenden. Es ist ein einfacher Wrapper, der eine globale Variable "Namespace" erstellt, und Sie verpacken Ihren CommonJS-kompatiblen Code in eine "define" -Funktion wie folgt:
Weitere Dokumente hier:
https://github.com/mckoss/namespace
quelle
Die clientseitig erforderliche Bibliothek bietet eine asynchrone
load()
Funktion, mit der jede JS-Datei oder jedes NPM-Modul (das verwendet wirdmodule.exports
), jede.css
Datei, jede.json
, jede.html
, jede andere Datei als Text geladen werden kann .z.B,
npm install clientside-require --save
Ein wirklich cooler Teil dieses Projekts ist, dass Sie in jedem
load()
ed-Skript die Synchronfunktionrequire()
genauso verwenden können, wie Sie es in node.js erwarten würden!z.B,
und innen
/path/to/functionality.js
:Dieser letzte Teil, der die synchrone
require()
Methode implementiert , ermöglicht es ihm, NPM-Pakete zu verwenden, die für die Ausführung auf dem Server erstellt wurden.Dieses Modul wurde entwickelt, um die
require
Funktionalität im Browser so genau wie möglich zu implementieren . Haftungsausschluss: Ich habe dieses Modul geschrieben.quelle
Ja, es ist sehr einfach zu bedienen, aber Sie müssen die Javascript-Datei per Skript-Tag in den Browser laden
und dann Benutzer in js Datei wie
Ich mache eine App mit Elektron und es funktioniert wie erwartet.
quelle