Wie kann ich npm für Frontend-Abhängigkeiten verwenden?
Möchte ich Fragen, ob es möglich ist (und in der Regel eine gute Idee) zu verwenden npm zu handhaben front-end-Abhängigkeiten (Backbone, jQuery).
Habe ich festgestellt, dass Backbone, jQuery und so weiter sind alle vorhanden, die durch npm, aber ich hätte eine andere entnahmestelle (die Standardeinstellung ist node_modules
) oder symlink oder etwas anderes...
Hat jemand das schon gemacht?
Ist es möglich?
Was muss ich ändern in package.json
?
InformationsquelleAutor der Frage dev.pus | 2012-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort: Art.
Ist es weitgehend bis zu den Modul-Autor zu unterstützen, aber es ist nicht üblich. Socket.io ist ein Beispiel für eine solche Unterstützung Modul, wie gezeigt, auf Ihre landing-page. Es gibt andere Lösungen, jedoch. Dies sind die beiden tatsächlich weiß ich nichts über:
Persönlich, ich bin derzeit die Entscheidung für die Verwendung von RequireJS ( http://requirejs.org/ ) und manuell verwalten meine Module, ähnlich wie es Mozilla mit Ihrer BrowserQuest-Beispielanwendung ( https://github.com/mozilla/BrowserQuest ). Beachten Sie, dass dies kommt mit der Herausforderung potenziell shim-Module wie Rückgrat oder Unterstrich, die entfernt die Unterstützung für AMD-Stil Modul-Lader. Sie finden ein Beispiel von, was beteiligt ist, in ausgleichend hier: http://tbranyen.com/post/amdrequirejs-shim-plugin-for-loading-incompatible-javascript
Wirklich, es scheint, wie es wird weh tun, egal was, das ist der Grund, warum native-Modul-Unterstützung ist so ein heißes Thema.
InformationsquelleAutor der Antwort Steve McGuire
+1 für die Verwendung von Browserify. Wir verwenden es hier bei diy.org und Liebe es. Die beste Einführung und die Argumentation hinter Browserify finden Sie in der Browserify-Handbuch. Themen wie CommonJS & AMD-Lösungen, build-pipelines und-Prüfung sind abgedeckt da.
Der Hauptgrund Browserify so gut funktioniert, ist es transparent arbeitet w/NPM. Solange ein Modul erforderlich sein können, kann es sein, Browserified (obwohl nicht alle Module gemacht werden, um die Arbeit im browser).
Grundlagen:
main.js
Führen:
Dann
bundle.js
im HTML-doc und der code inmain.js
ausgeführt wird.InformationsquelleAutor der Antwort Derek Reynolds
Unser team pflegt ein tool namens Lineman für Gebäude-front-end-Projekte. Das tool ist node-basiert ist, so ein Projekt stützt sich auf eine Menge von npm-Module, die funktionieren server-Seite bauen Ihr Vermögen, aber out-of-the-box es erwartet, finden Sie Ihre client-Seite Abhängigkeiten kopiert und verpflichtet
vendor/js
.Jedoch eine Reihe von Leuten (mich eingeschlossen) versucht haben, die Integration mit browserify, und wir haben in eine Menge von Komplexität und Probleme, angefangen von (a) npm-Module verwaltet von einer Dritten Partei, die entweder veraltet oder fügen Sie unerwünschte änderungen, (b) die tatsächliche Bibliotheken, die scheitern, wenn es geladen traditionellwenn eine Funktion auf oberster Ebene namens
require
ist auch definiert, durch AMD/Require.js Gepäck.Meine Kurzfristige Empfehlung ist, halten Sie aus und kleben Sie mit good ol' fashioned script-Verkettung, bis sich der Staub gelegt hat. Bis Sie Probleme haben, die groß genug ist, oder Komplex genug, um zu rechtfertigen, ich vermute, Sie verbringen mehr Zeit mit Debuggen und beheben Ihr aufbauen, als Sie sonst wäre. Und ich denke, die meisten von uns einig, die beste Nutzung Ihrer Zeit ist, konzentrieren Sie sich auf Ihren Anwendungscode, der nicht seinen build-tools.
InformationsquelleAutor der Antwort Justin Searls
Ich persönlich benutze webmake für meine kleinen Projekte. Es ist eine alternative zu browserify in der Art, es bringt npm-Abhängigkeiten in Ihrem browser, und es ist anscheinend leichter.
Ich hatte nicht die Gelegenheit zu vergleichen details browserify und webmake, aber ich merkte webmake funktioniert nicht gut mit Module intern die Verwendung von globalen Variablen Z als sockel.io (das ist voll aufblasen sowieso IMO).
Ich würde vorsichtig sein, über RequireJS, das wurde oben empfohlen. Denn es ist ein AMD loaderIhrem browser laden Sie Ihre JS-Dateien asynchron. Es wird induziert und mehr Austausch zwischen dem client und server und kann sich verschlechtern die UX von Menschen das surfen über mobile Netzwerke /unter schlechten WiFi. Außerdem, wenn Sie erfolgreich sind, um Ihre JS-code einfach und klein, asynchrone laden ist absolut nicht notwendig !
InformationsquelleAutor der Antwort vcarel
Möchten Sie vielleicht einen Blick auf http://jspm.io/ was ist ein browser Paket-manager. Hat schöne ES6-support zu.
InformationsquelleAutor der Antwort Brian Di Palma