Ich habe kürzlich Meteor entdeckt und ich kämpfe mit ES6-Klassen und importiere in einem neuen Meteor-Projekt. Ich möchte eine komplexe Struktur von Klassen haben, die von Meteor events / methods / helpers aufgerufen werden. Ich habe Babel.js zum Projekt hinzugefügt, indem ich den Befehl $ meteor add grigio:babel
geschrieben habe und es funktioniert ordnungsgemäß.
Beispiel für das, was ich erreichen möchte:
in server / models / article.js:
%Vor%in Server / Methoden / articles.js:
%Vor% Wenn Sie genau das haben, wird ReferenceError: Article is not defined
in einer Methodendatei erhöht, was angemessen ist. Also habe ich drei Möglichkeiten: schreibe alle Klassen in eine Datei, füge alle Klassen an ein globales Objekt an oder verwende ein gutes Modulsystem wie Browserify. Offensichtlich ist die dritte Option besser.
Aber wie benutze ich das? Babel konvertiert export
, import
standardmäßig in Browserify und Meteor löst einen require is not defined
Fehler bei der Seitenaktualisierung aus. Nach dem googlen des Problems habe ich keine klare Lösung gefunden, wie man Browserify zu Meteor hinzufügen kann. Sollte ich Meteor eine npm-Paketunterstützung hinzufügen, ein npm-Paket von browserify hinzufügen und es Meteor auf jeder Seite hinzufügen, auf der ich alles importiere / exportiere? Oder sollte ich einen ganz anderen Ansatz verwenden? Wie wird diese Aufgabe normalerweise in Meteor gehandhabt? Danke!
Ich habe früher darüber gelesen und dieses Problem auf github gefunden, das helfen könnte.
>Ordnen Sie die Klasse im Grunde nur einer Variablen zu, die sowohl dem Client als auch dem Server offen steht (lib / both / etc hängt von Ihrer Dateistruktur ab). Wie so:
%Vor%Scheint im Moment die beste Lösung zu sein.
So sammle ich Objekte in verschiedenen Namespaces, zum Beispiel:
%Vor% %Vor% Um zu vermeiden, Collections.Article
überall verwenden zu müssen, kann ich Folgendes in der Datei verwenden, auf die ich zugreifen muss: Article
in:
Ich benutze Meteor 1.4.1.1 und der Fehler bleibt bestehen, wenn Sie Ihren Ansatz reproduzieren. Es gibt jedoch einige neue Möglichkeiten, es6-Klassen jetzt zu verwenden:
1. Exportieren Sie Ihre Klasse als Konstante (z. B. zur Verwendung als Singleton-Objekt):
%Vor%Sie können dieses über
importieren %Vor%2. Exportieren Sie Ihre Klasse direkt als Standard des Moduls
%Vor%und importieren Sie es dann (wie oben) wie folgt
%Vor%++++++++++++++++++++++++++++++++++
Bezüglich der Frage von OP und des Fehlers können Sie etwas wie dieses versuchen:
Article.js
%Vor%Importieren und verwenden Sie das Singleton
%Vor%Tags und Links javascript browserify module meteor ecmascript-6