Maison > Article > interface Web > Explication détaillée des différences et des connexions entre l'exportation par défaut, l'exigence et l'exportation, et l'exportation
Êtes-vous toujours inquiet des différences et des connexions entre module.exports, exports, export et export default, import et require ? Cet article est fondamentalement suffisant !
1. Tout d'abord, abordons une question de base :
module.exports et exports appartiennent au CommonJS. spécification du module ! (Vous n'êtes pas sûr de commonjs ? Maître, veuillez jeter un œil aux spécifications de commonjs ici)
export et export default appartiennent à ES6 syntaxe (Vous n'êtes pas sûr de ES6 ? Maître, veuillez jeter un œil au module ES6 ici) !
De même, import et require appartiennent respectivement à ES6 et CommonJS !
2. Il y a un autre point clair pour savoir à quelle partie de la grammaire il appartient :
module. exports et exports, export et export par défaut sont tousModule d'exportation > et
exigentsont importer des modules. Alors ne vous y trompez pas maintenant, module.exports export correspond à require import, et export export correspond à import import. Hé ! Attendez, pourquoi dit-on que module.exports export correspond à require import, et export export correspond à import import ? Ensuite, il y a exports et export default ! ? Alors continuons. 3. La différence et la connexion entre module.exports et exports
À ce stade, je dois mentionner la modularité : Les applications de nœuds sont composées de modules et adoptent la spécification de module CommonJS. Selon cette spécification, chaque fichier est un module et a sa propre portée. Les variables, fonctions et classes définies dans un fichier sont privées et ne sont pas visibles par les autres fichiers. La spécification CommonJS stipule qu'au sein de chaque module, la variable
représente le module actuel. Cette variable est un objet et son attribut (c'est-à-dire ) est l'interface externe. Le chargement d'un module charge en fait l'attribut du module.
Le code ci-dessus génère des variables
et des fonctions à module
. La méthode exports
module.exports
module.exports
est utilisée pour charger les modules.
var x = 5;var addX = function (value) { return value + x;};module.exports.x = x;module.exports.addX = addX;
Après avoir lu l'introduction à la spécification commonjs tout à l'heure, vous pouvez connaître les différences et connexions suivantes :
En fait, la variable exports pointe vers le module .exports, et le chargement du module est en fait le module.exports
qui charge le module. Cela équivaut à avoir une ligne comme celle-ci en tête de chaque module. x
addX
require
et
export par défautvar example = require('./example.js');console.log(example.x); // 5console.log(example.addX(1)); // 6sont principalement composées de :
et module.exports
.
var exports = module.exports;importe les interfaces exposées par d'autres modules. L'exportation est en fait légèrement différente de l'exportation par défaut dans la façon dont elles sont écrites. L'une consiste à exporter des interfaces individuelles et l'autre consiste à exporter une interface entière par défaut. Lors de l'utilisation de la commande
, l'utilisateur doit connaître le nom de la variable ou de la fonction à charger, sinon elle ne pourra pas être chargée. Voici un moyen simple de l'écrire sans connaître les noms d'interface spécifiques exposés. Utilisez simplement la commande pour spécifier la sortie par défaut du module. export peut s'écrire comme ceci :
Après avoir utilisé la commande export
pour définir l'interface externe du module, d'autres fichiers JS peuvent charger ce module via le import构成
commande. export
import
import
export default
Comparons la valeur par défaut de l'exportation et la sortie de l'exportation.
<code class=" language-javascript"><span class="token comment">// testA.js<span class="token keyword">var f <span class="token operator">= <span class="token string">'Miel'<span class="token punctuation">;<span class="token keyword">var name <span class="token operator">= <span class="token string">'Jack'<span class="token punctuation">;<span class="token keyword">var data<span class="token operator">= <span class="token number">1988<span class="token punctuation">; export <span class="token punctuation">{f<span class="token punctuation">, name<span class="token punctuation">, data<span class="token punctuation">}<span class="token punctuation">;<br/></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>Vous pouvez voir que le premier groupe est utilisé, l'instruction n'a pas besoin d'utiliser des accolades ; le deuxième groupe est utilisé, l'instruction correspondante doit utiliser des accolades, un module ne peut avoir qu'une seule sortie par défaut, donc il ne peut être utilisé qu’une seule fois.
export
import
<code class=" language-javascript"><span class="token comment">// main.js import <span class="token punctuation">{</span></span></code><code class=" language-javascript"><span class="token comment"><span class="token keyword"><span class="token operator"><span class="token string"><span class="token punctuation"><span class="token keyword"><span class="token operator"><span class="token string"><span class="token punctuation"><span class="token keyword"><span class="token operator"><span class="token number"><span class="token punctuation"><span class="token punctuation">f<span class="token punctuation">, name<span class="token punctuation">, data</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><code class=" language-javascript"><span class="token comment"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation">} from <span class="token string">'./testA'<span class="token punctuation">;<br/></span></span></span></span></span></span></span></code>
<code class=" language-javascript"><span class="token comment">// export-default.js export default <span class="token keyword">function <span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{ console<span class="token punctuation">.<span class="token function">log<span class="token punctuation">(<span class="token string">'foo'<span class="token punctuation">)<span class="token punctuation">;<span class="token punctuation">}<br/></span></span></span></span></span></span></span></span></span></span></span></span></code>
// 或者写成function foo() { console.log('foo');} export default foo;C'est en fait clair après la lecture les éléments ci-dessus, import et require ne sont que deux syntaxes pour importer des modules appartenant respectivement à ES6 et CommonJS.
<code class=" language-javascript"><span class="token comment">// import-default.js import customName from <span class="token string">'./export-default'<span class="token punctuation">;<span class="token function">customName<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;<span class="token comment"> // 'foo'<br/><br/></span></span></span></span></span></span></span></span></code>
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!