Comment puis-je modifier l'ordre dans lequel Meteor charge les fichiers Javascript?
Lorsque vous effectuez un projet avec le Météore cadre, il regroupe tous les fichiers ensemble, mais il ne semble pas être une façon de dire explicitement "je veux que ce fichier soit chargé avant que l'un".
Disons, par exemple, j'ai 2 fichiers javascript: foo.js
et bar.js
.
Le fichier bar.js
est effectivement contenant le code en fonction l'un de l'un à l'intérieur de foo.js
mais Meteor est en cours de chargement bar.js
avant foo.js
, brisant le projet.
- Dans node.js je voudrais simplement utiliser
require('./bar')
à l'intérieur defoo.js
- Dans le navigateur, je mettrais un
<script>
tag pointant versfoo.js
et l'autre, après, pointant versbar.js
, afin de charger les fichiers dans le bon ordre.
Comment pouvons-nous faire dans Meteor?
- Meteor charges choses dans l'ordre alphabétique à droite maintenant, comme un simple hack vous pouvez renommer un fichier pour le mettre avant/après l'autre dans l'ordre alphabétique. Je sais que ça manque d'élégance, mais c'est le seul moyen que je connais pour l'influence de l'ordre de chargement.
- En effet. J'espérais qu'il y est un autre moyen pour ce faire. Peut-être que l'exposition d'une browserify-comme paquet serait une solution: github.com/substack/node-browserify . Il permettrait à des personnes de l'utilisation du nœud de style require() si ils veulent dans leur projet.
Vous devez vous connecter pour publier un commentaire.
Selon le Météore de la documentation, les fichiers sont actuellement chargés dans cet ordre:
Source:
http://docs.meteor.com/#structuringyourapp
api.use('reactjs:[email protected]', ['client', 'server']);
. Cela signifie que reactjs:réagir colis sera chargé avant ce paquet et ses dépendances, même plus tôt.Pas une solution pour tous les scénarios, mais je pense que, idéalement, tout ce qui dépend d'un autre code sera placé dans un Météore.fonction de démarrage, pour s'assurer que tout est déjà chargé.
Vous pouvez toujours nous un JS chargeur comme yepnope.js et l'ajouter à la client.js fichier. Cela fonctionne pour moi.
J'ai un ensemble de fonctions utilitaires que j'ai structuré en vertu de la common espace de noms (js mondiale).
I. e.
puis dans les sous-dossiers:
aussi j'ai des tas de code qui utilise Utils et il est sous-objets.
Évidemment, cette structure ne fonctionne pas comme Meteor charge les sous-dossiers en premier.
Pour le faire fonctionner comme prévu, j'ai dû créer /sous-dossier/sous-dossier/sous-dossier avec le sens des noms, puis de pousser la racine de l'objet dans la plupart des sous-dossier, et de la direction générale des objets dans les sous-dossiers pas si profond.
Il est très contre-intuitif à mon goût et sujettes à l'erreur (en supposant que vous avez la composante qui est encore plus profond dans la structure de dossiers).
Pour résoudre ce problème, j'ai utilisé Q bibliothèque reporte et de promesses. La Solution n'est toujours pas propre car il vous fait de la routine code de répéter et de contrôles, mais il vous donne le plein contrôle sur l'ordre de chargement sans toucher à la structure de répertoire (bonjour pour les personnes qui vous dit que vous pouvez organiser meteor code que vous voulez).
Exemple:
C'est l'exemple de plutôt étroite de cas d'utilisation, comme la plupart du temps, vous serez heureux avec la manipulation de ces variables globales à l'intérieur de certains interaction de l'utilisateur des rappels ou des
Meteor.startup
où tout est déjà initialisé. Sinon, si vous voulez un contrôle très fin de l'initialisation de l'ordre sur un stade très précoce, qui pourrait être une solution.