Este post foi editado pela última vez por Summer em 13-02-2019 às 14:04
Em 2009, o programador americano Ryan Dahl criou node.js projeto para usar a linguagem JavaScript para programação do lado do servidor.
Isso marca o nascimento da "programação modular em Javascript". A complexidade da interface é limitada, e é aceitável não ter módulos, mas do lado do servidor, devem existir módulos para interagir com o sistema operacional e outras aplicações, caso contrário não pode ser programado de forma alguma.
Uma das ideias mais importantes na programação de nós são os módulos, e é essa ideia que torna possível a engenharia em larga escala do JavaScript. A programação modular era popular no mundo JS, e baseava-se nisso, e depois, no lado do navegador, também apareceram kits de ferramentas como requirejs e seajs, por assim dizer, sob a especificação correspondente, que requerem toda programação modular antes do ES6, mesmo agora, antes do módulo ES6 ser totalmente implementado.
No CommonJS, o módulo de exposição usa module.exports e exports, e muitas pessoas não entendem por que há dois objetos expostos, que serão introduzidos mais adiante
No CommonJS, existe um método global require() que é usado para carregar módulos. Assumindo que exista um módulo de matemática math.js, ele pode ser carregado assim.
Você pode então chamar os métodos fornecidos pelo módulo de:
É justamente por causa do método de requerimento usado pelo CommonJS que o método de requerimento usado pela AMD e CMD também foi usado posteriormente para se referir ao estilo dos módulos
Especificação AMD
Com módulos do lado do servidor, é natural que todos queiram módulos do lado do cliente. E é melhor que os dois sejam compatíveis, e que um módulo possa rodar tanto no servidor quanto no navegador sem modificações.
No entanto, há uma limitação importante que torna a especificação CommonJS inaplicável a ambientes de navegador. Ainda assim, o código da seção anterior, se rodar em um navegador, haverá um grande problema
A segunda linha math.add(2, 3) roda após a primeira linha require('math'), então ela precisa esperar math.js carregamento terminar. Ou seja, se o tempo de carregamento for longo, o app inteiro para por aí e espera.
Isso não é um problema do lado do servidor, pois todos os módulos são armazenados no disco rígido local e podem ser carregados de forma síncrona, e o tempo de espera é o tempo de leitura do disco rígido. No entanto, para navegadores, isso é um grande problema, pois os módulos ficam no lado do servidor, e o tempo de espera depende da velocidade da Internet, que pode levar bastante tempo, e o navegador fica em estado de "morte suspensa".
Portanto, módulos do lado do navegador não podem usar "síncrono", mas apenas "assíncrono". Esse é o contexto do nascimento da especificação AMD.
AMD é uma abreviação de "Definição de Módulo Assíncrono", que significa "Definição de Módulo Assíncrono". Ele carrega o módulo de forma assíncrona, e o carregamento do módulo não afeta a operação de suas instruções subsequentes. Todas as instruções que dependem desse módulo são definidas em uma função de callback que não será executada até que o carregamento seja concluído.
Módulos devem ser definidos com uma função define() específica.
•ID: string, nome do módulo (opcional) •Dependências: é o módulo dependente que queremos carregar (opcional), usando o caminho relativo. , note que é um formato de array •fábrica: método fábrica, retorna uma função de módulo Se um módulo não depende de outros módulos, ele pode ser definido diretamente na função define().
Se o módulo também depende de outros módulos, então o primeiro argumento da função define() deve ser um array que indica as dependências do módulo.
Quando a função requerido() carrega o módulo acima, ela carrega Lib.js arquivo primeiro.
A AMD também usa a instrução requir() para carregar o módulo, mas, ao contrário do CommonJS, requer dois parâmetros:
O primeiro parâmetro [módulo] é um array, e os membros nele são os módulos a serem carregados; O segundo parâmetro de callback é a função de callback após o sucesso da carga. Se você reescrever o código anterior para a versão AMD, fica assim:
Math.add() não está sincronizado com o carregamento do módulo de matemática, e o navegador não suspende a animação. Então, obviamente, a AMD é mais adequada para o ambiente do navegador.
Atualmente, existem duas principais bibliotecas Javascript que implementam a especificação AMD :require.js e curl.js.
|