Ahora, requería.js es mi forma favorita de programar JavaScript. Hace que la ruptura de código en piezas y sea fácil de administrar. Request.js Optimizer puede ayudarnos a distribuir una aplicación más grande en múltiples aplicaciones más pequeñas, conectarla a través de dependencias y finalmente fusionarla durante la compilación y el embalaje. Estas razones nos solicitan que usen requerir.js.
Entonces, echemos un vistazo a las características increíbles que requieren. ¡JS tiene!
Compatible con CommonJS
AMD (especificación de definición del módulo asíncrono) aparece del grupo de trabajo CommonJS. CommonJS tiene como objetivo crear un ecosistema de JavaScript. Una parte importante de CommonJS es el transporte/c, el predecesor de AMD, y requería.js es una implementación de esta especificación.
La diferencia de sintaxis entre el módulo CommonJS y el módulo AMD se debe principalmente a la necesidad de AMD de admitir las características asincrónicas del navegador. El módulo CommonJS debe ser sincronizado, por ejemplo:
La copia del código es la siguiente:
var somEmodule = require ("somEmodule");
var otroModule = require ("otroModule");
exports.asplode = function () {
somemodule.dotehawesome ();
otroModule.domoArawesome ();
};
El módulo AMD carga el módulo de forma asincrónica, por lo que la definición del módulo requiere una matriz como el primer parámetro, y la función de devolución de llamada después de cargar el módulo se pasa como el segundo parámetro.
La copia del código es la siguiente:
Define (["somemodule"], function (somemodule) {
devolver {
Asplode: function () {
somemodule.dotehawesome ();
// Esto se ejecutará asíncronamente
requirir (["otroModule"], function (otherModule) {
otroModule.domoArawesome ();
});
}
};
});
Sin embargo, la AMD también es compatible con la sintaxis CommonJS en Request.js. Al envolver el módulo CommonJS a través de la función Define de AMD, también puede tener un módulo CommonJS en AMD, por ejemplo:
La copia del código es la siguiente:
Definir (función (requerir, exportar, módulo)
var somEmodule = require ("somEmodule");
var otroModule = require ("otroModule");
somemodule.dotehawesome ();
otroModule.domoArawesome ();
exports.asplode = function () {
somemodule.dotehawesome ();
otroModule.domoArawesome ();
};
});
De hecho, requería.js interpreta el contenido del módulo de la función de devolución de llamada a través de la función .tostring, encuentra su dependencia correcta y lo convierte en un módulo AMD normal. Cabe señalar que si escribe módulos de esta manera, puede ser incompatible con otros cargadores AMD porque esto viola la especificación AMD, pero puede entender cómo este formato está bien escrito.
Lo que está sucediendo aquí, requiere.js en realidad realiza la función de función. Es importante tener en cuenta que si elige escribir módulos como este, lo más probable es que sean incompatibles con otros cargadores de módulos AMD, ya que esto viola la especificación AMD, ¡pero es una buena idea comprender que este formato existe!
CDN Back
Otro tesoro Hidden Request.js es que admite la carga de reversión de la biblioteca local correspondiente cuando el CDN se carga incorrectamente. Podemos lograr esto a través de requerir.Config:
La copia del código es la siguiente:
requirejs.config ({
Rutas: {
jQuery: [
'//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js',,
'lib/jQuery'
]
}
});
Sin dependencias? ¿Objeto literal? ¡ningún problema!
Cuando escribe un módulo que no tiene dependencias y solo devuelve un objeto que contiene algunas funciones funcionales, podemos usar una sintaxis simple:
La copia del código es la siguiente:
definir({
forCechoke: function () {
},
Forcelighting: function () {
},
FORCERUN: function () {
}
});
Es simple y útil si el módulo es solo una colección de funciones, o simplemente un paquete.
Dependencia circular
En algunos casos, es posible que necesitemos las funciones en los módulos Modulea y Modulea para confiar en algunas aplicaciones. Esta es la dependencia circular.
La copia del código es la siguiente:
// js/app/modulea.js
Define (["requerir", "aplicación/aplicación"],
función (requerir, aplicación) {
devolver {
foo: function (title) {
var app = request ("App/App");
return app.something ();
}
}
}
);
Obtenga la dirección del módulo
Si necesita obtener la dirección del módulo, puede hacer esto ...
La copia del código es la siguiente:
var ruta = require.tourl ("./ style.css");
Base
Por lo general, al realizar pruebas unitarias, su código fuente se puede colocar en una carpeta similar a SRC, y al mismo tiempo, su prueba puede colocarse en una carpeta similar a las pruebas. Esto puede ser difícil para obtener la configuración de prueba correcta.
Por ejemplo, tenemos un archivo index.html en la carpeta de pruebas y necesitamos cargar pruebas/especificaciones/*. JS localmente. Y suponiendo que todo el código fuente esté en SRC/JS/*. JS y hay un Main.js en esa carpeta.
En index.html, Data-Main no se establece cuando se requiere.js se carga.
La copia del código es la siguiente:
<script src = "src/js/vendor/require.js"> </script>
<script>
requerir (["../src/js/main.js"], function () {
require.config ({
BaseUrl: "../src/js/"
});
requerir([
"./spec/test.spec.js",
"./spec/moar.spec.js"
], función() {
// Inicie su marco de prueba
});
});
</script>
Puede encontrar que Main.js está cargado. Sin embargo, dado que Data-Main no está establecido, necesitamos formular un BaseURL como queramos. Al usar Data-Main, BaseURL se establecerá automáticamente de acuerdo con el archivo que establece.
Aquí puedes ver Main.js está cargado. Sin embargo, dado que no carga la etiqueta de script principal de datos, entonces debe especificar una base. Cuando los datos se usan principalmente para BaseURL, se infiere de la ubicación en el archivo principal. Al personalizar BaseUrl, podemos almacenar fácilmente el código de prueba y el código de aplicación por separado.
Jsonp
Podemos manejar terminales JSONP como este:
La copia del código es la siguiente:
requerir( [
"http://someapi.com/foo?callback=define"
], function (data) {
console.log (datos);
});
Para las bibliotecas que no son de AMD, use Shim para resolver
Según muchas solicitudes, necesitamos usar bibliotecas no amd. Por ejemplo, la columna vertebral y el subrayador no se adaptan a la especificación AMD. Y JQuery en realidad solo se define como una variable global llamada jQuery, por lo que no tiene que hacer nada con jQuery.
Afortunadamente, podemos usar la configuración de cuhería para resolver este problema.
La copia del código es la siguiente:
require.config ({
Rutas: {
"Backbone": "Vendor/Backbone",
"Subsensor": "Vendor/Subscore"
},
CHIM: {
"Backbone": {
Deps: ["Subscore"],
Exportaciones: "Backbone"
},
"subrayado": {
Exportaciones: "_"
}
}
});