Points clés
- requirejs est un chargeur de module AMD pour les navigateurs qui chargent de manière asynchrone des scripts et des fichiers CSS, gérer les dépendances et créer des structures de code. Il comprend également un outil d'optimisation pour les environnements de production.
- Lors de l'utilisation de requirejs, le code doit être enveloppé dans la définition du module. Les modules peuvent être référencés dans d'autres modules et toutes les dépendances seront chargées avant le chargement du module lui-même.
- Optimiseur requisejs R.JS peut être configuré pour construire tous les modules en un seul fichier. Cette configuration peut également faire du module une bibliothèque globale indépendante, à la fois en tant que module AMD et en tant qu'exportation globale dans le navigateur.
- requirejs peut être utilisé pour créer des bibliothèques et des applications qui les utilisent. Ce processus consiste à définir et à utiliser des modules AMD, à configurer R.JS Optimizer et à configurer les obligations dans le navigateur pour générer du code bien structuré et organisé.
requirejs est un chargeur de module AMD pour les navigateurs qui peuvent charger des scripts et des fichiers CSS de manière asynchrone. Vous n'avez plus besoin de traiter l'ordre des fichiers de script dans un seul fichier (comme index.html). Au lieu de cela, vous enveloppez simplement votre code dans une définition de module, les DIBRS seront responsables de la gestion des dépendances, ce qui rend votre structure de code plus claire et plus organisée. Il dispose également d'un outil d'optimisation qui compresse et connecte des fichiers pour les environnements de production.
Le site officiel fournit une documentation détaillée sur son API et il existe de nombreux exemples de bases de code pour vous aider. Cependant, il a beaucoup de configurations et l'utilisation de requirejs sera délicate au début.
Dans cet article, nous apprendrons à utiliser les besoins de requis en construisant une bibliothèque avec des modules AMD, en l'optimisant et en l'exportant en tant que module autonome à l'aide de l'optimiseur requisejs. Plus tard, nous créerons l'application à l'aide de requirejs et utiliserons notre bibliothèque.
Ce tutoriel suppose que vous avez une certaine compréhension des exigences. Si vous recherchez un guide Get-Start, consultez: Comprenez les exigences pour le chargement efficace du module JavaScript.
Installation requirejs
requirejs peut être installé via Bower:
bower install requirejs --save
ou vous pouvez obtenir le fichier de github.
Il existe également un générateur yeoman basé sur un grognement pour les projets requirejs.
Définir le module AMD
Nous enroulons le code dans define()
qui en fera un module AMD.
Fichier: mylib.js
define(['jquery'], function($) { // $現(xiàn)在是jquery。 return 'mylib'; });
c'est tout. Notez que define()
accepte un premier paramètre facultatif, le tableau de dépendance, dans ce cas ['jquery']
. Il s'agit de la liste de dépendances pour ce module. Tous les modules du tableau seront chargés avant ce module. Lors de l'exécution de ce module, les paramètres sont le module correspondant dans le tableau de dépendance.
Ainsi, dans ce cas, jQuery sera chargé d'abord, puis l'a transmis dans la fonction comme paramètre $, puis nous pouvons l'utiliser en toute sécurité dans le module. Enfin, notre module renvoie une cha?ne. La valeur de retour est ce qui est passé au paramètre de fonction lorsque ce module est requis.
Citez d'autres modules
Voyons comment cela fonctionne en définissant le deuxième module et en se référant à notre premier module mylib.js.
Fichier: main.js
bower install requirejs --save
Vous pouvez vous référer à n'importe quel nombre de dépendances dans le tableau de dépendance, et tous les modules seront fournis par des paramètres de fonction dans le même ordre. Dans ce deuxième module, nous faisons référence aux modules jQuery et Mylib et renvoyons simplement un objet expose certaines variables. Les utilisateurs de cette bibliothèque utiliseront cet objet comme bibliothèque.
Configurer Optimiseur requisejs: R.JS
Vous vous demandez peut-être, comment les obligations sachent-elles quel fichier charger en regardant simplement les cha?nes dans le tableau de dépendance? Dans notre exemple, nous fournissons JQuery et Mylib en tant que cha?nes, requirejs sait où se trouvent ces modules. Mylib est très simple, c'est Mylib.js, omettant .js.
Où est jQuery? C'est à cela que sert la configuration de requirejs. Vous pouvez fournir un large éventail de configurations via la configuration de requirejs. Il existe deux fa?ons de fournir cette configuration, car nous utilisons l'optimiseur requisejs et je vous montrerai la méthode R.JS. R.JS est l'optimiseur requisejs.
Nous fournirons à R.JS une configuration qui optimise tous les modules en un seul fichier. La configuration que nous fournissons permettra à R.JS de créer des modules dans des bibliothèques mondiales indépendantes, à la fois en tant que modules AMD et en tant qu'exportations globales dans le navigateur.
r.js peut être exécuté via la ligne de commande ou comme module de n?ud. Il existe également une tache grogn pour gérer les grognt-requirejs Optimizer.
avec cela étant dit, voyons à quoi ressemble notre configuration:
Fichier: outils / build.js
define(['jquery'], function($) { // $現(xiàn)在是jquery。 return 'mylib'; });
Les fichiers de configuration sont en fait le c?ur de requirejs. Une fois que vous comprenez comment ces paramètres fonctionnent, vous pouvez utiliser les obligations comme un professionnel.
Vous pouvez effectuer différentes actions et ajuster les builds de projet à l'aide de fichiers de configuration. Pour en savoir plus sur la configuration et les obligations, nous vous recommandons de vous référer à la documentation et au wiki. Il existe également un exemple de fichier de configuration qui montre comment utiliser le système de construction, alors assurez-vous également de vous y référer.
Enfin, nous avons réellement dirigé l'optimiseur. Comme je l'ai déjà dit, vous pouvez l'exécuter via la ligne de commande ou via le n?ud et la tache grogn. Voir le fichier R.JS ReadMe pour exécuter l'optimiseur dans différents environnements.
define(['jquery', 'mylib'], function($, mylib) { // $照常是jquery // mylib是字符串`mylib`,因?yàn)檫@是第一個模塊的返回值 // return { version: '0.0.1, jQuery版本:' + $.fn.jquery, mylibString: mylib } });
Cela générera le fichier de build dans dist / mylib.js
build.js
Ensuite, voyons ce que ces paramètres signifient réellement.
BUSTERL - Le chemin racine pour tous les modules à rechercher.
chemins - Carte de chemin par rapport au nom du module de la fondon.
Dans notre exemple, "MyLib" mappe à "../main", qui est relatif à la substanier, donc lorsque nous faisons référence "Mylib", il charge le fichier "../lib/../mylib/main. js ?. Notez que nous ajoutons la substanier, puis les paramètres des chemins, puis le nom du module suivi du suffixe .js. Là, vous pouvez spécifier comment le module est mappé sur des fichiers tels que jQuery et Mylib.
Inclure - le module que nous voulons inclure dans le processus d'optimisation. Les dépendances requises pour le module incluses sont implicitement incluses. Dans notre exemple, le module principal dépend de Mylib et JQuery, qui sera également inclus, il n'est donc pas nécessaire de l'inclure explicitement. Nous incluons également Amond, qui sera mentionné plus tard.
Exclure - Module que nous voulons exclure du processus d'optimisation. Dans notre cas, nous avons exclu JQuery. L'utilisateur qui construit la bibliothèque fournira une bibliothèque jQuery. Nous verrons cela plus tard.
OUT - Le nom du fichier de sortie optimisé.
WRAP - Enveloppe le package de construction dans le texte de début et de fin spécifié par WRAP. Le fichier de sortie optimisé est le suivant: wrap.Starte le module enveloppé.end contenu dedans. wrap.start et wrap.end sont les noms de fichiers dont le contenu est contenu dans la sortie.
amande
La bibliothèque construite ne contient pas le fichier require.js, mais utilise des amandes. Almond est une petite implémentation API AMD qui remplacera require.js.
Emballez notre bibliothèque
Dans la configuration R.JS, nous enroulons notre bibliothèque à l'aide de fichiers wrap.start et wrap.end. Nous incluons également des amandes dans la bibliothèque, qui rendront notre bibliothèque indépendante, afin qu'elles puissent être utilisées via des variables globales du navigateur ou en tant que module AMD via DIBREJS.
Fichier: wrap.start
bower install requirejs --save
Les modules que nous incluons Main, Mylib et Almond sont situés au milieu de Wrap.Start et Wrap.end.
Fichier: wrap.end
define(['jquery'], function($) { // $現(xiàn)在是jquery。 return 'mylib'; });
Si l'utilisateur utilise le chargeur AMD, le fichier construit demande "jQuery" comme dépendance AMD. Si le consommateur utilise uniquement les variables globales du navigateur, la bibliothèque obtiendra la variable globale $ et l'utilisera pour la dépendance jQuery.
en utilisant la bibliothèque avec requirejs
Notre bibliothèque est terminée, utilisons maintenant réellement en créant une application requisejs.
Fichier: app.js
define(['jquery', 'mylib'], function($, mylib) { // $照常是jquery // mylib是字符串`mylib`,因?yàn)檫@是第一個模塊的返回值 // return { version: '0.0.1, jQuery版本:' + $.fn.jquery, mylibString: mylib } });
Rien de spécial ici, c'est juste un autre module qui fait référence à JQuery et Mylib. Lorsqu'un module est défini avec define
, il n'est pas exécuté immédiatement, c'est-à-dire que sa fonction de rappel (passé après un tableau de dépendances) n'est pas exécutée immédiatement. Cela signifie que notre application ne sera pas lancée simplement en définissant ce module. Voyons maintenant comment configurer les obligations et exécuter réellement ce module, notre application.
Configurer les obligations pour le navigateur
Nous configurerons les obligations dans un fichier et exécuterons notre module d'application. Cependant, il existe différentes fa?ons de le faire.
Fichier: Common.js
{ "baseUrl": "../lib", "paths": { "mylib": "../main" }, "include": ["../tools/almond", "main"], "exclude": ["jquery"], "out": "../dist/mylib.js", "wrap": { "startFile": "wrap.start", "endFile": "wrap.end" } }
Les configurations de baseurl et de chemins sont les mêmes qu'auparavant. La valeur de configuration supplémentaire ici est:
SHIM: Configurez les dépendances et les exportations des scripts traditionnels "Browser Global" qui n'utilisent pas define()
pour déclarer les dépendances et définir les valeurs du module. Par exemple, la squelette n'est pas un module AMD, mais c'est une variable globale de navigateur qui exporte la colonne vertébrale vers l'espace de noms global que nous avons spécifié dans les exportations. Dans notre exemple, le module s'appuie également sur jQuery et Soulignement, nous le spécifions donc à l'aide de DEP. Le script dans le tableau DEPS est chargé avant de charger la squelette, et après le chargement, la valeur des exportations sera utilisée comme valeur du module.
Veuillez noter que vous pouvez également utiliser R.JS dans ce projet d'application, qui nécessitera une configuration distincte. Mais ne soyez pas confus à ce sujet. Je n'entrerai pas dans les détails sur la fa?on de le faire, mais cela est similaire à ce que nous avons fait avec la bibliothèque. Voir l'exemple de configuration de construction pour plus d'informations.
Exiger et définir
Nous chargerons le module en utilisant la nécessité et l'exécuterons immédiatement. Parfois, définir et exiger peut confondre celui à utiliser. Définir un module, mais ne l'exécute pas, nécessite de définir un module et l'exécute - c'est-à-dire qu'il charge et exécute un module dépendant avant qu'il ne s'exécute. En règle générale, vous aurez un requis comme module d'entrée principal, qui dépendra d'autres modules définis via Define.
Chargement du script
Habituellement, vous inclurez tous les fichiers de script dans index.html. Maintenant que nous utilisons les obligations, nous devons simplement inclure le requirejs et spécifier notre Data-Main, qui est le point d'entrée de notre application. Il existe de nombreuses fa?ons de définir des options de configuration ou de détacher le module principal utilisé dans index.html. Vous pouvez trouver plus d'informations ici.
bower install requirejs --save
Conclusion
Dans cet article, nous avons construit une bibliothèque et une application qui utilise la bibliothèque à l'aide de requirejs. Nous avons appris à configurer l'optimiseur R.JS et à configurer les besoins de requirejs dans le navigateur. Enfin, nous avons appris à définir et à utiliser des modules AMD à l'aide de requirejs. Cela rend notre code bien structuré et organisé.
Dans la première moitié de ce didacticiel (Optimiseur de configuration), j'ai utilisé cet exemple de référentiel-libglobal, la seconde moitié n'est pas compliquée, vous devriez donc pouvoir le faire vous-même maintenant.
Le site Web officiel de requirejs est la documentation finale, mais assurez-vous de consulter l'exemple de référentiel sur GitHub et les exemples de projets dans ce référentiel qui démontrent l'utilisation de l'application Obligationn.
FAQ (FAQ) sur la construction de bibliothèques avec requirejs
Quel est le but principal des exigences dans le développement JavaScript?
requirejs est un fichier JavaScript et un chargeur de module. Il est optimisé pour l'utilisation du navigateur, mais peut également être utilisé dans d'autres environnements JavaScript. L'objectif principal des exigences est d'encourager l'utilisation de la programmation modulaire en JavaScript. Il aide les développeurs à gérer les dépendances entre les fichiers JavaScript et à modulariser leur code. Cela conduit à une meilleure organisation de code, à la maintenabilité et à la réutilisabilité. Il améliore également la vitesse et la qualité du code.
Comment les obligations gèrent-elles les dépendances de fichiers JavaScript?
requirejs utilise l'API de définition du module asynchrones (AMD) pour gérer les modules JavaScript. Ces modules peuvent être chargés de manière asynchrone, ce qui signifie qu'ils ne empêchent pas d'autres scripts d'exécuter lors du chargement. Lorsque vous définissez un module à l'aide de requirejs, vous spécifiez ses dépendances. Requirejs garantit alors que ces dépendances sont chargées avant le module lui-même.
Comment définir les modules à l'aide de requirejs?
Pour définir un module dans requirejs, vous pouvez utiliser la fonction define()
. Cette fonction prend deux paramètres: un tableau de dépendance et une fonction d'usine. Une dépendance est le chemin d'accès au fichier sur lequel le module dépend. Les fonctions d'usine sont l'endroit où vous écrivez du code du module. Cette fonction est appelée une fois toutes les dépendances chargées.
Comment utiliser des modules définis avec les exigences dans votre code?
Pour utiliser un module défini avec DIbleJS, vous pouvez utiliser la fonction require()
. Cette fonction accepte deux paramètres: un tableau de dépendance et une fonction de rappel. Les dépendances sont le chemin du module que vous souhaitez utiliser. La fonction de rappel est l'endroit où vous utilisez le module. Cette fonction est appelée une fois que tous les modules sont chargés.
Puis-je utiliser les obligations avec d'autres bibliothèques JavaScript telles que jQuery?
Oui, vous pouvez utiliser les obligations avec d'autres bibliothèques JavaScript telles que jQuery. Requirejs dispose d'une fonction intégrée pour charger des scripts non modulaires traditionnels qui n'utilisent pas define()
pour déclarer les dépendances et définir les valeurs du module, appelées "cale". Avec Shim, vous pouvez spécifier les dépendances et les exportations pour les scripts qui n'utilisent pas define()
pour déclarer les dépendances et définir les valeurs du module.
Comment optimiser mon code avec requirejs?
requirejs est livré avec un outil d'optimisation appelé R.Js. Cet outil combine et compresse vos fichiers JavaScript et leurs dépendances en un seul fichier. Cela réduit le nombre de demandes HTTP et de taille de fichier, ce qui peut considérablement améliorer le temps de chargement de la page Web.
Quelle est la différence entre Define () et require () dans requirejs?
La fonction define()
est utilisée pour définir un module, tandis que la fonction require()
est utilisée pour charger le module. Les deux fonctions acceptent un tableau de dépendances et une fonction en tant que paramètres. Cependant, la fonction transmise à define()
est utilisée pour créer des valeurs de module, tandis que la fonction transmise à require()
est utilisée pour exécuter le code après le chargement du module.
Puis-je utiliser les obligations JON dans Node.js?
Oui, vous pouvez utiliser les obligations dans Node.js. Cependant, Node.js possède son propre système de modules, vous n'avez donc probablement pas besoin de requirejs. Si vous souhaitez utiliser le même code dans votre navigateur et Node.js, ou si vous préférez l'API AMD, les obligations peuvent être un bon choix.
Comment gérer les erreurs dans requirejs?
requirejs fournit un rappel onError
pour gérer les erreurs. Ce rappel est appelé lorsqu'une erreur se produit lors du chargement du module. Vous pouvez utiliser ce rappel pour enregistrer ou récupérer à partir de l'erreur.
Puis-je charger des fichiers CSS à l'aide de requirejs?
Oui, vous pouvez utiliser le plugin requis-CSS pour charger les fichiers CSS à l'aide de requirejs. Ce plugin vous permet de charger et d'attendre les fichiers CSS comme vous le feriez avec les modules JavaScript.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Il existe trois fa?ons courantes d'initier des demandes HTTP dans Node.js: utilisez des modules intégrés, Axios et Node-Fetch. 1. Utilisez le module HTTP / HTTPS intégré sans dépendances, ce qui convient aux scénarios de base, mais nécessite un traitement manuel de la couture des données et de la surveillance des erreurs, tels que l'utilisation de https.get () pour obtenir des données ou envoyer des demandes de post via .write (); 2.AXIOS est une bibliothèque tierce basée sur la promesse. Il a une syntaxe concise et des fonctions puissantes, prend en charge l'async / attendre, la conversion JSON automatique, l'intercepteur, etc. Il est recommandé de simplifier les opérations de demande asynchrones; 3.Node-Fetch fournit un style similaire à la récupération du navigateur, basé sur la promesse et la syntaxe simple

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la cha?ne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

Bonjour, développeurs JavaScript! Bienvenue dans JavaScript News de cette semaine! Cette semaine, nous nous concentrerons sur: le différend de marque d'Oracle avec Deno, les nouveaux objets Time JavaScript sont pris en charge par les navigateurs, les mises à jour Google Chrome et certains outils de développeurs puissants. Commen?ons! Le différend de marque d'Oracle avec la tentative de Deno Oracle d'enregistrer une marque "JavaScript" a provoqué la controverse. Ryan Dahl, le créateur de Node.js et Deno, a déposé une pétition pour annuler la marque, et il pense que JavaScript est un niveau ouvert et ne devrait pas être utilisé par Oracle

La promesse est le mécanisme central pour gérer les opérations asynchrones en JavaScript. Comprendre les appels de cha?ne, la gestion des erreurs et les combinants est la clé pour ma?triser leurs applications. 1. L'appel de la cha?ne renvoie une nouvelle promesse à travers. Puis () pour réaliser la concaténation des processus asynchrones. Chaque .then () re?oit le résultat précédent et peut renvoyer une valeur ou une promesse; 2. La gestion des erreurs doit utiliser .catch () pour attraper des exceptions pour éviter les défaillances silencieuses, et peut renvoyer la valeur par défaut dans Catch pour continuer le processus; 3. Combinateurs tels que promesse.all () (réussi avec succès uniquement après tout succès), promesse.race () (le premier achèvement est retourné) et promesse.allsetTled () (en attente de toutes les achèvements)

Cacheapi est un outil fourni par le navigateur pour mettre en cache les demandes de réseau, qui est souvent utilisée en conjonction avec travailleur de service pour améliorer les performances du site Web et l'expérience hors ligne. 1. Il permet aux développeurs de stocker manuellement des ressources telles que des scripts, des feuilles de style, des photos, etc.; 2. Il peut faire correspondre les réponses du cache en fonction des demandes; 3. Il prend en charge la suppression des caches spécifiques ou la nettoyage du cache entier; 4. Il peut mettre en ?uvre des stratégies de priorité de cache ou de priorité de réseau grace à l'écoute des événements Fetch; 5. Il est souvent utilisé pour le support hors ligne, accélérez la vitesse d'accès répétée, préchargement des ressources clés et du contenu de mise à jour des antécédents; 6. Lorsque vous l'utilisez, vous devez faire attention au contr?le de la version du cache, aux restrictions de stockage et à la différence entre le mécanisme de mise en cache HTTP.

La boucle d'événement de JavaScript gère les opérations asynchrones en coordonnant les piles d'appels, les webapis et les files d'attente de taches. 1. La pile d'appels exécute du code synchrone, et lors de la rencontre de taches asynchrones, il est remis à WebAPI pour le traitement; 2. Une fois que le WebAPI a terminé la tache en arrière-plan, il met le rappel dans la file d'attente correspondante (macro tache ou micro tache); 3. La boucle d'événement vérifie si la pile d'appels est vide. S'il est vide, le rappel est retiré de la file d'attente et poussé dans la pile d'appels pour l'exécution; 4. Micro taches (comme Promise. puis) ??prendre la priorité sur les taches macro (telles que Settimeout); 5. Comprendre la boucle d'événements permet d'éviter de bloquer le thread principal et d'optimiser l'ordre d'exécution du code.

Les bulles d'événements se propagent de l'élément cible vers l'extérieur vers le n?ud d'ancêtre, tandis que la capture d'événements se propage de la couche externe vers l'intérieur vers l'élément cible. 1. événements Bubbles: Après avoir cliqué sur l'élément enfant, l'événement déclenche l'auditeur de l'élément parent vers le haut. Par exemple, après avoir cliqué sur le bouton, il sortira d'abord cliqué sur l'enfant, puis parent. 2. Capture d'événement: définissez le troisième paramètre sur true, afin que l'auditeur soit exécuté dans l'étape de capture, tels que le déclenchement de l'écouteur de capture de l'élément parent avant de cliquer sur le bouton. 3. Les utilisations pratiques incluent la gestion unifiée des événements d'éléments enfants, le prétraitement d'interception et l'optimisation des performances. 4. Le flux d'événements DOM est divisé en trois étapes: capture, cible et bulle, et l'écouteur par défaut est exécuté dans l'étape de la bulle.

Dans les tableaux JavaScript, en plus de la carte et du filtre, il existe d'autres méthodes puissantes et rarement utilisées. 1. La réduction peut non seulement résumer, mais également compter, se regrouper, aplatir les tableaux et construire de nouvelles structures; 2. Find et FindIndex sont utilisés pour trouver des éléments ou des index individuels; 3.Il et tout sont utilisés pour déterminer si les conditions existent ou que toutes les personnes se rencontrent; 4.Sort peut être trié mais changera le tableau d'origine; 5. Faites attention à la copie du tableau lorsque vous l'utilisez pour éviter les effets secondaires. Ces méthodes rendent le code plus concis et efficace.
