web-dev-qa-db-fra.com

RequireJS: différence entre les fonctions "requirejs" et "require"

J'utilise requireJS 2.x. J'ai découvert que certains tutoriels (et les documents officiels) utilisent parfois

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

et parfois

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

Y a-t-il une différence entre ces deux fonctions (require et requirejs)? Je n'ai trouvé aucun mot à ce sujet dans les documents. :(

76
Matthias Bayer

Ce sont exactement les mêmes.

La raison est que certains environnements peuvent déjà avoir un require, auquel cas RequireJS ne le remplace pas et autorise l'utilisation de la bibliothèque via requirejs

Voir cet engagement - https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39

84
Simon Smith

requirejs et require sont-ils les mêmes?

Depuis RequireJS 2.1.15, require et requirejs dans l'espace global sont en effet "exactement les mêmes", comme en témoigne ce test que vous pouvez effectuer dans la console:

> require === requirejs
true

Que le test renvoie true vous indique qu'ils sont exactement le même objet fonction . Ce ne sont pas deux fonctions qui ont un code similaire ou identique. Ils sont le même objet, point final.

Notez cependant que lorsque vous exécutez define(['require'], function (require) { Le require transmis à la fonction est normalement différent du global require.

Devez-vous utiliser require ou requirejs?

Ça dépend. RequireJS est un chargeur AMD mais ce n'est pas le seul chargeur en ville. Si vous voulez écrire du code conforme à 100% à la spécification AMD , afin que quelqu'un utilisant votre code puisse utiliser le chargeur de son choix sans avoir à modifier votre code, vous devez utiliser require au niveau global, car requirejs est spécifique à RequireJS. Un autre chargeur AMD ne le définira pas. La spécification AMD définit require mais pas requirejs.

Si vous chargez quelque chose d'autre qui définit un require global, vous devez utiliser requirejs au niveau global pour éviter les conflits.

Dans un module, utilisez toujours define pour obtenir une référence à require. Vous devez le faire tout à fait indépendamment de l'existence d'un conflit dans l'espace mondial.

19
Louis

OK, ils peuvent en effet être "exactement les mêmes". Concentrons-nous ensuite sur la raison pour laquelle vous utiliseriez l'un par rapport à l'autre ...

Ce qui n'est pas clair, c'est ce qui devrait être considéré comme la "meilleure pratique": si requirejs fournit une assurance supplémentaire "si certains environnements peuvent déjà avoir un besoin", alors ne serait-ce pas une bonne idée de toujours utiliser la fonction requirejs pour définir une configuration requise plutôt que la fonction requise?

De plus, que se passe-t-il si l'impensable se produit et que l'environnement en question a non seulement déjà un "require" défini mais aussi un "requirejs" défini? Est-ce à dire que nous devrions également avoir un requirejsjs? Etc...?

2
Jazimov

Ce sont les mêmes sites Web ouverts qui ont déjà été chargés

puis ouvrez la console Chrome console

tapez requis dans la console et appuyez sur Entrée

tapez requirejs dans la console et appuyez sur Entrée

vous pouvez constater qu'ils sont la même fonction avec des noms différents

0