Wie kann ich access-Konstanten in der lib/constants.js Datei in Meteor?
Habe ich die Dokumentation um die Konstanten in der lib/constants.js
- Datei.
Frage:
Wie Sie Zugriff auf diese Konstanten in meinem client-Seite html und js Dateien?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie brauchen, um Sie Globale Variablen in der Reihenfolge für andere Dateien, um Sie zu sehen.
JavaScript
/lib/constants.js
/client/some-other-file.js
CoffeeScript
/lib/Konstanten.Kaffee
/client/einige-andere-Datei.Kaffee
Variablen in Meteor sind Datei-Bereich.
Normalerweise
var myVar
im globalen Kontext-Knoten, jedoch in Meteor bleibt er in der geschlossenen Datei (das macht es wirklich sinnvoll zu schreiben, transparenter code). Was passiert, ist, dass Meteor wird wickeln Sie alle Dateien in einem IIFE, scoping die Variablen in die Funktion und somit effektiv in der Datei.Definieren Sie eine Globale variable, entfernen Sie einfach die
var
/let
/const
Stichwort Meteor und kümmern um es zu exportieren. Sie haben, um Funktionen erstellen, die durch den gleichen Mechanismus (myFunc = function myFunc() {}
odermyFunc = () => {}
). Dieser export wird dann entweder auf client-Seite, wenn der code befindet sich in derclient
Verzeichnis oder server-Seite, wenn es in derserver
Verzeichnis, oder beide, wenn es ist in einigen anderen nicht-so-Besondere Verzeichnisse.Vergessen Sie nicht diese Regeln zu befolgen:
main.
sind letztes geladenlib/
Verzeichnis geladen sind nebenNun können Sie in ein Problem der server-Seite, wenn Sie versuchen, Zugriff auf diese Globale variable sofort, aber Meteor ist noch nicht instanziiert, da es noch nicht über die Datei, die die variable definieren. So haben Sie zu kämpfen mit Dateien und Ordner-Namen, oder vielleicht versuchen, trick
Meteor.startup()
(viel Glück damit). Dies bedeutet weniger lesbar, fragile Lage-abhängigen code. Einer Ihrer Kollegen verschiebt eine Datei und Ihre Anwendung bricht.Oder vielleicht haben Sie einfach nicht wollen, um zurück zu gehen, um die Dokumentation jedes mal, wenn Sie eine Datei, die zum ausführen eines fünf-Schritt-Prozess, um festzustellen, wo diese Datei ist und wie es zu benennen.
Gibt es zwei Lösungen für dieses problem, da der Meteor 1.3:
1. ES6-Module
Meteor 1.3 (derzeit in beta) ermöglicht die Verwendung Module in Ihrer Anwendung mithilfe der
modules
- Paket (meteor add modules
oderapi.use('modules')
).Module gehen einen langen Weg, hier ist ein einfaches Beispiel, die direkt aus dem link oben:
Datei:
a.js
(zuerst geladen mit traditionellen lade-Reihenfolge-Regeln):Datei:
b.js
(geladen Sekunde mit traditionellen lade-Reihenfolge-Regeln):Meteor 1.3 kümmern sich um das laden der
b.js
Datei vora.js
da es schon explizit gesagt.2. Pakete
Letzte Möglichkeit zum deklarieren von globalen Variablen erstellen Sie ein Paket.
Jede variable deklariert, ohne die
var
Stichwort exportiert werden, wird das ganze Paket. Es bedeutet, dass Sie können Ihre Variablen in Ihren eigenen Dateien, fein Korn den laden, um mitapi."addFiles"
, die Kontrolle, wenn Sie gehen sollten, um den client, den server oder beide. Es erlaubt Ihnen auch, umapi.verwenden Sie
diese Variablen in anderen packages.Dies bedeutet klar, wiederverwendbaren code. Möchten Sie eine Konstante? Entweder tun Sie es in eines der bereits angelegten Datei oder erstellen Sie einen
api.addFiles
es.Lesen Sie mehr über Paket-management -in der doc.
Hier ein Zitat aus "Die Strukturierung Ihrer Anwendung":
Es ist erstaunlich, zu beide Ansätze kombinieren mit Meteor 1.3. Module sind einfacher und leichter zu schreiben, als die Pakete, da mit Ihnen ist eine
export
Zeile und wie vieleimport
s als notwendig, anstatt das ganze Paket-Erstellung, aber nicht so dumm-Fehler-Nachweis (vergessen zu schreiben dasimport
Zeile am Anfang der Datei), die als Pakete.Eine gute Wette wäre, die Module verwenden, zuerst, dann wechseln Sie zu einem Paket, sobald Sie sind anstrengend zu schreiben, oder ob ein Fehler passiert ist, weil es (miswritten die
import
, ...).Stellen Sie einfach sicher zu vermeiden, sich auf traditionelle laden um, wenn Sie etwas größer als ein POC.
Meteor.startup()
Rückruf, Meteor, sagte der Anwendung wurde mit Fehler, daSOME_GLOBAL_VARIABLE
war nicht definiert... ist Alles in Ordnung, wenn der Zugriff innerhalb einer Publikation zum Beispiel (denn das ist, ausgelöst durch den Kunden), aber ruft es sofort in einer anderen Datei funktionierte überhaupt nicht. Also habe ich ein Paket am Ende!var
keyword-ich würde undefined Fehler, da war ich mit"use strict";
an der Spitze meiner JavaScript-Dateien (die ich denke, ist wichtig). Mit einem Blick auf diesen thread gelöscht viel für mich github.com/meteor/meteor/issues/1380