Pergunta

Quando você faz um projeto com o Meteoro quadro, pacotes de todos os arquivos juntos, mas não parece ser uma maneira de dizer explicitamente "eu quero esse arquivo a ser carregado antes que um".

Vamos dizer, por exemplo, eu tenho 2 arquivos javascript: foo.js e bar.js.

O arquivo bar.js é, na verdade, contém o código de função um a um dentro foo.js mas de Meteoros está a carregar bar.js antes de foo.js, quebrando o projeto.

  • No node.js Eu poderia simplesmente usar require('./bar') dentro foo.js
  • No navegador, Gostaria de colocar um <script> tag apontando para foo.js e outra, depois, apontando para bar.js, a fim de carregar os arquivos na ordem correta.

Como podemos fazer isso em Meteoro?

Foi útil?

Solução

De acordo com o Meteoro de documentação, arquivos que estão actualmente carregados nesta ordem:

  1. Arquivos [project_root]/lib são carregados primeiro
  2. Os arquivos são classificados pelo diretório de profundidade.Mais profundo arquivos são carregados em primeiro lugar.
  3. Os arquivos são classificados em ordem alfabética.
  4. principal.* os arquivos são carregados pela última vez.

Fonte:http://docs.meteor.com/#structuringyourapp

Outras dicas

Não é uma solução para todos os cenários, mas eu acho que, idealmente, qualquer coisa que é dependente de um outro código que deve ser colocado em um Meteoro.função de inicialização, para garantir que tudo já está carregado.

Você sempre pode nos JS loader como yepnope.js e adicioná-lo para o client.js arquivo.Isso funciona para mim.

Eu tenho um conjunto de funções utilitárias que eu estruturada em espaço de nomes comuns (js global).

I. e.

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

e, em seguida, em subpastas:

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

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

também eu tenho monte de código que usa Utils e subobjectos.

Obviamente, esta estrutura não funciona como Meteoro de carga subpastas primeiro.

Para fazê-lo funcionar como o esperado, eu tinha que criar subpasta //subpasta/subpasta com o significado de nomes e, em seguida, empurrar o objeto raiz no mais profundo subpasta, e ramo de objetos em subpastas não tão profunda.

É extremamente intuitivo para o meu gosto e passível de erro (suponha que você tenha componente que é ainda mais profunda na estrutura de pastas).

Para resolver esse problema, eu costumava Q biblioteca com adia e promessas.A solução ainda não está limpo como ele faz você do código de rotina de repetição e cheques, mas ele lhe dá total controle sobre a ordem de carregamento sem mexer com a estrutura de diretório (olá para as pessoas que diz que você pode organizar meteoro código como você deseja).

Exemplo:

//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   
    })
});

Este é o exemplo de um pouco estreito de caso de uso, como, principalmente, você vai ser feliz com a manipulação destas variáveis globais dentro de alguns interação do usuário retornos de chamada ou Meteor.startup onde tudo já inicializada.Caso contrário, se você deseja um controle mais refinado sobre a inicialização do pedido na fase inicial, que poderia ser uma solução.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top