Domanda

Quando si effettua un progetto con il framework Meteor, colpisce tutti i file insieme, ma non sembra essere un modo per dire esplicitamente "Voglio che questo file venga caricato prima di quello".

Diciamo, ad esempio, ho 2 file JavaScript: foo.js e bar.js.

Il file bar.js è in realtà contenente il codice a seconda di uno all'interno foo.js ma Meteor sta caricando bar.js prima di foo.js, rompendo il progetto.

    .
  • in nodo.js Utilizzerei semplicemente require('./bar') all'interno foo.js
  • Nel browser , metterei un tag <script> che punta a foo.js e un altro, dopo averlo puntato verso bar.js, per caricare i file nell'ordine corretto.

Come possiamo farlo in Meteor ?

È stato utile?

Soluzione

Secondo la documentazione Meteor, i file sono attualmente caricati in questo ordine:

    .
  1. I file in [Project_Root] / Lib vengono caricati prima
  2. I file sono ordinati per la profondità della directory.I file più profondi sono caricati prima.
  3. I file sono ordinati in ordine alfabetico.
  4. Principale. * I file sono caricati per ultimo.
  5. Fonte: http://docs.meteor.com/#strutturationyourapp

Altri suggerimenti

Non una soluzione per tutti gli scenari, ma penso idealmente tutto ciò che dipende dall'altro codice sarebbe stato inserito in una funzione Meteor.Startup, per garantire che tutto sia già caricato.

Puoi sempre USA un caricatore JS come yepnope.js e aggiungilo al file client.js.Questo funziona per me.

Ho un insieme di funzioni di utilità che ho strutturato in base allo spazio dei nomi comuni (Global Global).

I.e.

// utils/utils.js
Utils = {};
.

E poi in sottocartelle:

// utils/validation/validation.js
Utils.Validation = {};

// utils/validation/creditCard.js
Utils.Validation.creditCard = ... // validation logic etc
.

Inoltre ho un grappolo di codice che utilizza utils ed è subObjects.

Ovviamente, questa struttura non funziona prima come sottocartelle di carico Meteor.

Per farlo funzionare come previsto, ho dovuto creare / sottocartella / sottocartella / sottocartella con nomi privi di significato, quindi spingere l'oggetto radice nella maggior parte della sottocartella profonda e ramo oggetti nelle sottocartelle non così profonde.

È estremamente controintuitivo per il mio gusto e l'errore-Prona (supponiamo di avere componenti che è ancora più profondi nella struttura delle cartelle).

Per indirizzare questo problema, ho usato la libreria Q con diffici e promesse. La soluzione non è ancora pulita come ti rende il codice di routine ripetizione e controlla ma ti dà il pieno controllo sull'ordine di caricamento senza scherzare con la struttura della directory (Ciao a persone che afferma di poter organizzare il codice Meteor come vuoi).

Esempio:

//utils.js
UtilsDefer = UtilsDefer || Q.defer();
UtilsDefer.resolve({
    // here some root utils stuff
});

//cards.js
// here we'll depend on Utils but don't want to care about directory structure
UtilsDefer = UtilsDefer || Q.defer(); // it will be a) already 
// resolved defer from utils.js, or b) new defer that will
// be resolved later in utils.js
UtilsDefer.then(function(Utils) {
    // do something with utils usage, or for instance add some fields here
    Utils.CreditCardDefer = Utils.CreditCardDefer || Q.defer();
    Utils.CreditCardDefer.resolve({
        // Credit card utils here
    })
});

//someOtherFile.js
// it will be pain to use sub-objects with this method though:
UtilsDefer = UtilsDefer || Q.defer();
UtilsDefer.then(function(Utils) {
    Utils.CreditCardDefer = Utils.CreditCardDefer || Q.defer();
    Utils.CreditCardDefer.then(function(CreditCard) {
        // do stuff with CreditCard _if_ you need to do it on startup stage   
    })
});
.

Questo è l'esempio di caso di uso piuttosto ristretto, come soprattutto sarai felice di gestire questi globali all'interno di alcuni callback interazione dell'utente o Meteor.startup in cui tutto è già inizializzato. Altrimenti, se si desidera il controllo a grana fine sull'ordine di inizializzazione in fase molto precoce, potrebbe essere una soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top