RequireJS: diferencia entre las funciones "requirejs" y "require"

80

Estoy usando requireJS 2.x. Descubrí que algunos tutoriales (y los documentos oficiales) a veces usan

requirejs.config({ [...] });
requirejs(["module"]) ...

y aveces

require.config({ [...] });
require(["module"]) ...

¿Hay alguna diferencia entre esas dos funciones (require y requirejs)? No pude encontrar ninguna palabra sobre eso en los documentos. :(

Matthias Bayer
fuente

Respuestas:

86

Son exactamente lo mismo.

La razón es que algunos entornos ya pueden tener un require, en cuyo caso RequireJS no lo sobrescribe y permite el uso de la biblioteca a través derequirejs

Vea este compromiso: https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39

Simon Smith
fuente
15
Gracias :) Eso debe anotarse en los documentos. Los comentarios en el código no aclaran esto.
Matthias Bayer
Estoy de acuerdo, es confuso (e incluso la página "oficial" de requirejs tiene inconsistencias entre el uso y los ejemplos). Es bueno saber que son uno en el mismo.
Bil Simser
El uso de CommonJS en el navegador (a través de webpack o browserify) significa que también puede acceder, requirejsya requireque ya es una variable local en esta situación. He encontrado esto útil en los componentes de React para cargar scripts adicionales en componentDidMount.
Simon Smith
1
Buena biblioteca, documentación confusa. Incluso la sección "API" no es la API, sino más bien un "libro de cocina". Hay muchos tutoriales que son mejores para comenzar que los documentos oficiales.
Hal50000
20

¿Son requirejsy requirelo mismo?

A partir de RequireJS 2.1.15, requirey requirejsen el espacio global son de hecho "exactamente iguales", como se puede evidenciar con esta prueba que puedes realizar en la consola:

> require === requirejs
true

Que la prueba devuelva truele dice que son exactamente el mismo objeto de función . No son dos funciones que tengan un código similar o idéntico. Son el mismo objeto, punto.

Sin embargo, tenga en cuenta que cuando ejecuta la función define(['require'], function (require) {La requirepasada a la función normalmente es diferente de la global require.

¿Deberías usar requireo requirejs?

Depende. RequireJS es un cargador AMD pero no es el único cargador de la ciudad. Si desea escribir código que se ajuste al 100% a las especificaciones de AMD , de modo que alguien que use su código pueda usar el cargador que desee sin tener que modificar su código, entonces debe usarlo requirea nivel global, porque requirejses específico de RequireJS. Otro cargador de AMD no lo definirá. La especificación AMD define requirepero no requirejs.

Si está cargando algo más que define un global require, debe utilizarlo requirejsa nivel global para evitar conflictos.

Dentro de un módulo, utilice siempre definepara obtener una referencia a require. Debe hacer esto independientemente de si hay un conflicto en el espacio global.

Luis
fuente
2

Bien, de hecho pueden ser "exactamente iguales". Entonces, centrémonos en por qué usarías uno frente al otro ...

Lo que no está claro es lo que debería considerarse "mejor práctica": si requirejs proporciona una garantía adicional "si algunos entornos ya pueden tener un requisito", entonces ¿no sería una buena idea usar siempre la función requirejs para definir una configuración de requisito? que la función requerida?

Además, ¿qué sucede si sucede lo impensable y el entorno en cuestión no solo ya tiene un "require" definido, sino que también tiene un "requirejs" definido? ¿Eso significa que también deberíamos tener un requirejsjs? Y así...?

Jazimov
fuente
1
Técnicamente son los mismos, como $y jQueryson. Es solo para proporcionar un respaldo y ser un buen ciudadano en caso de que un entorno ya lo use require. Es un caso muy avanzado y se recomienda su uso require, pero no es necesario: github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables-
Simon Smith
0

Son el mismo sitio web abierto que ya se cargó

luego abre la consola Chrome

escriba require en la consola y presione enter

escriba requirejs en la consola y presione enter

puedes encontrar que son la misma función con diferentes nombres

JeevanReddy Avanaganti
fuente