Ich erstelle meine erste Bower-Komponente. Nach dem Ausführen bower init
des Skripts werde ich gefragt, welche Modultypen dieses Paket verfügbar macht. mit diesen Optionen:
- amd
- es6
- Globale
- Knoten
Was ist der Unterschied zwischen diesen Optionen?
Ich erstelle meine erste Bower-Komponente. Nach dem Ausführen bower init
des Skripts werde ich gefragt, welche Modultypen dieses Paket verfügbar macht. mit diesen Optionen:
Was ist der Unterschied zwischen diesen Optionen?
Wenn Sie es nicht wissen, ist es sehr wahrscheinlich, dass Globals die richtige Antwort für Sie ist.
In jedem Fall müssen Sie verstehen:
Diese Funktion wurde erst kürzlich in Bower eingeführt und ist noch gar nicht dokumentiert (AFAIK). Es beschreibt im Wesentlichen moduleType
, welche Zustände für welche Modultechnologie das Paket verbrauchen soll (siehe oben).
Im Moment hat es keine Auswirkung außer dem Festlegen der moduleType
Eigenschaft in der bower.json
Datei des Pakets.
Die ursprüngliche Pull-Anfrage finden Sie unter https://github.com/bower/bower/pull/934 .
Ein paar zusätzliche Punkte, um Kommentare zu beantworten:
moduleType
Grundstück AFAIK keine Validierung durchgeführt. Dies bedeutet, dass Personen technisch den Wert verwenden dürfen, den sie für das Grundstück wünschen, auch angularjs
wenn sie dazu geneigt sindnon-interoperable/proprietary moduleTypes
Elemente aufzunehmen (denken Sie an Komponisten, Winkel usw.) - was leicht verständlich ist, aber nichts hindert die Menschen wirklich daran, den moduleType
gewünschten Wert zu verwendenyui moduleType
, so dass "Ausnahmen" zu machen sind, vorausgesetzt, sie sind Teil eines konzertierten PlansWas würde ich tun, wenn ich ein Paket für einen nicht aufgeführten Paketmanager verfassen und auf bower veröffentlichen würde?
Ich würde ein es6-Modul erstellen und / patch es6-transpiler verwenden, um das benötigte Paketformat auszugeben. Dann würde ich entweder / und:
es6
alsmoduleType
Haftungsausschluss: Ich habe keine praktische Erfahrung mit der Erstellung von AngularJS-Modulen.
angularjs
sich könnte ichglobals
ja verwenden, aber mein Update lesen. Hoffentlich hilft das.Initiale
Ich benutze auch
bower init
zum ersten Mal.Die Optionen sollten sich auf die verschiedenen Möglichkeiten beziehen, JavaScript-Code zu modularisieren:
define
, wie requirejs.require
.In meinem Fall habe ich einen Node.js-Modul- Dflow geschrieben, aber ich verwende browserify, um eine dist / dflow.js- Datei zu erstellen , die eine globale Dflow- Variable exportiert : Also habe ich Globals ausgewählt .
Andere Updates
Die I - Befehl verwendet , um browserify DFlow als Fenster globales Objekt war
browserify -s dflow -e index.js -o dist/dflow.js
Habe ich es , weil ich es vorziehen , zu verwenden erfordern auch innerhalb des Browsers, so dass ich jetzt bin mit
browserify -r ./index.js:dflow -o dist/dflow.js
und so habe ich den bower.moduleType in meiner bower.json- Datei in node geändert .
Die Hauptmotivation war , dass , wenn mein Modulname einen Bindestrich, zum Beispiel meines Projekt hat Flow-Ansicht , ich muß camelize die globalen Namen in Flowview .
Dieser neue Ansatz hat zwei weitere Vorteile:
${npm_package_name}
Variablen nutzen und einmal das Skript schreiben, mit dem ich browserifiziere.Dies ist ein weiteres Thema, aber es lohnt sich wirklich zu überlegen, wie nützlich letzterer Vorteil ist: Lassen Sie mich das
npm.scripts.browserify
Attribut teilen, das ich in meiner package.json verwende"browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"
quelle
define(function(require, exports, module) { "use strict"; module.exports = { Collection: require("./collection"), View: require('./view') }; });
Nur als Referenz, genau das spezifiziert Bower in Bezug auf die Modultypen:
Relevanter Link: https://github.com/bower/spec/blob/master/json.md#moduletype
quelle