Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der Verwendung von Exports und module.exports von node.js und ES6

Detaillierte Erläuterung der Verwendung von Exports und module.exports von node.js und ES6

php中世界最好的语言
php中世界最好的语言Original
2018-04-16 15:36:404164Durchsuche

Dieses Mal werde ich Ihnen eine detaillierte Erklärung der Verwendung von node.js und ES6-Exporten und module.exports geben. Was sind die Vorsichtsmaßnahmen bei der Verwendung von node.js und ES6? exports und module.exports? Das Folgende ist ein praktischer Fall, schauen wir uns das an.

Ah Xi, mein Kopf ist so groß....

Da wir nun fertig sind, setzen wir uns zusammen und klären den Anwendungsbereich.

  • require: Import wird sowohl von node als auch von es6 unterstützt

  • export/import: Nur Export wird von es6 unterstützt

  • module.exports/exports : Nur Exporte werden vom Knoten

unterstützt Von diesem Moment an hatte ich das Gefühl, es sei an der Zeit, die Beziehung zwischen ihnen zu klären, sonst würde ich vor Verwirrung sterben. Es gibt nicht viel zu sagen, fangen wir an! !

Knotenmodul

Das Modulsystem in Node folgt der CommonJS-Spezifikation.

Dann stellt sich wieder die Frage: Was ist die CommonJS-Spezifikation?

Da js in der Vergangenheit relativ verwirrend war, schrieb jeder seinen eigenen Code und es gab kein Konzept für ein Modul, und diese Spezifikation ist eigentlich eine Definition eines Moduls.

Die von CommonJS definierten Module sind unterteilt in: Modulidentifikation (Modul), Moduldefinition (Exporte), Modulreferenz (erforderlich)

Erklären Sie zunächst Exporte und module.exports

Wenn ein Knoten eine Datei ausführt, wird in der Datei ein Export- und Modul-Objekt ,

generiert. Und das Modul verfügt über ein Exportattribut. Die Beziehung zwischen ihnen ist wie unten gezeigt. Sie verweisen alle auf einen {}-Speicherbereich.

exports = module.exports = {};

Werfen wir also einen Blick auf den Code.

//utils.js
let a = 100;
console.log(module.exports); //能打印出结果为:{}
console.log(exports); //能打印出结果为:{}
exports.a = 200; //这里辛苦劳作帮 module.exports 的内容给改成 {a : 200}
exports = '指向其他内存区'; //这里把exports的指向指走
//test.js
var a = require('/utils');
console.log(a) // 打印为 {a : 200}

Wie aus dem Obigen ersichtlich ist, handelt es sich bei dem von require exportierten Inhalt tatsächlich um den Inhalt des Speicherblocks, auf den module.exports verweist, und nicht um exports.

Kurz gesagt besteht der Unterschied zwischen ihnen darin, dass exports nur ein Verweis auf module.exports ist, der verwendet wird, um letzteres beim Hinzufügen von Inhalten zu unterstützen.

Um es im Klartext auszudrücken: Exporte unterstützen module.exports nur bei der Verarbeitung der Daten im Speicher. Am Ende bin ich immer noch erschöpft von module.exports . Es ist wirklich harte Arbeit.

Wenn Sie zum Verständnis das Konzept des Speicherblocks verwenden, wird es tatsächlich sehr klar.

Um Verwirrung zu vermeiden, versuchen Sie dann, module.exports zum Exportieren und dann require zum Importieren zu verwenden.

Modulexport und -import in ES

Ehrlich gesagt sind die Module in es sehr klar. Es gibt jedoch einige Details, die geklärt werden müssen.

Beispielsweise sind „export“ und „export default“ und beim Importieren „import a from ..“, „import {a} from ..“ etwas verwirrend, also beginnen wir damit, sie zu klären.

Export und Exportstandard

Lassen Sie uns zunächst über diese beiden Exporte sprechen. Lassen Sie uns dann über ihre Unterschiede sprechen

  • Sowohl Export als auch Export Standard können zum Exportieren von Konstanten, Funktionen, Dateien, Modulen usw. verwendet werden.

  • In einer Datei oder einem Modul kann es mehrere Exporte und Importe geben, es gibt jedoch nur einen Export Standard

  • Exportieren durch Export, beim Importieren { } hinzufügen, Exportstandard ist nicht erforderlich

  • Export kann Variablen direkt exportierenAusdruck , Standardexport funktioniert nicht.

Schauen wir uns den Code an, um ihn zu überprüfen

testEs6Export.js

'use strict'
//导出变量
export const a = '100'; 
 //导出方法
export const dogSay = function(){ 
 console.log('wang wang');
}
 //导出方法第二种
function catSay(){
 console.log('miao miao'); 
}
export { catSay };
//export default导出
const m = 100;
export default m; 
//export defult const m = 100;// 这里不能写这种格式。

index.js

//index.js
'use strict'
var express = require('express');
var router = express.Router();
import { dogSay, catSay } from './testEs6Export'; //导出了 export 方法 
import m from './testEs6Export'; //导出了 export default 
import * as testModule from './testEs6Export'; //as 集合成对象导出
/* GET home page. */
router.get('/', function(req, res, next) {
 dogSay();
 catSay();
 console.log(m);
 testModule.dogSay();
 console.log(testModule.m); // undefined , 因为 as 导出是 把 零散的 export 聚集在一起作为一个对象,而export default 是导出为 default属性。
 console.log(testModule.default); // 100
 res.send('恭喜你,成功验证');
});
module.exports = router;

Wie oben zu sehen ist, fühlt sich das Modulsystem von ES6 sehr flexibel an.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Implementierungsmethode für die Durchquerung des JS-Binärbaums vor, in der Reihenfolge und nach der Bestellung

So erhalten Sie das Berührungsereignis Länge der Gleitstrecke

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von Exports und module.exports von node.js und ES6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn