Inhaltsverzeichnis
CommonJS
Grundlegendes Schreiben
Spezifikation
Im obigen Code exportiert die Datei a.js das Modul
In AMD verwendet das verfügbar gemachte Modul define Funktion
Grundlegende Schreibmethode
Aus der Schreibmethode geht hervor, dass die Schreibmethode von CMD der von AMD sehr ähnlich ist. Der Hauptunterschied ist der Unterschied im Abhängigkeitsladezeitpunkt. Wie oben erwähnt, ist AMD vom Front-End abhängig Die Spezifikation befürwortet einfach das Proximity-Prinzip: Abhängigkeiten werden nicht geladen, bevor das Modul ausgeführt wird. Wenn eine bestimmte Abhängigkeit erforderlich ist, wird sie erneut geladen.
Wenn CommonJS, AMD und CMD parallel laufen, wird eine Lösung benötigt, die mit ihnen kompatibel ist, sodass wir bei der Entwicklung nicht mehr auf die von uns befolgten Spezifikationen achten müssen abhängige Module, und die Entstehung von UMD soll dieses Problem lösen.
Der obige Code ist die grundlegende Schreibmethode von UMD. Wie aus dem Code ersichtlich ist, kann er sowohl die CommonJS-Spezifikation als auch die AMD-Spezifikation unterstützen.
Das Obige stellt jeweils CommonJS, AMD, CMD und UMD vor. Sie sind alle Beiträge der Community zur Modularisierung von JS. Der grundlegende Grund für die Entstehung dieser Spezifikation ist JS-Sprache verfügt derzeit über keine Modularitätsfunktionen. Die JS-eigene Modularisierungslösung kann derzeit durch Modularitätsfunktionen ersetzt werden, die häufig im Browser verwendet werden Seite und Knotenseite.
und
import命令
export default命令
Heim Web-Frontend js-Tutorial Warum ist Modularität erforderlich? Einführung in gängige modulare Lösungen in js

Warum ist Modularität erforderlich? Einführung in gängige modulare Lösungen in js

Oct 26, 2018 pm 03:20 PM
es6 javascript 模块化

Der Inhalt dieses Artikels befasst sich mit der Frage, warum Modularisierung erforderlich ist. Eine Einführung in häufig verwendete modulare Lösungen in js hat einen gewissen Referenzwert. Freunde in Not können darauf verweisen.

Warum Modularisierung erforderlich ist

Vor dem Aufkommen von ES6 bot die JS-Sprache selbst keine Modularisierungsfähigkeiten, was einige Probleme für die Entwicklung verursachte, von denen das wichtigste ist Zwei Probleme dürften die globale Umweltverschmutzung und das Chaos im Abhängigkeitsmanagement sein.

// file a.js
var name = 'aaa';
var sayName = function() {
    console.log(name);
};
Nach dem Login kopieren
<!-- file index.html -->
<script src=&#39;xxx/xxx/a.js&#39;></script>

<script>
    sayName(); // 'aaa'
    
    // code...
    
    var name = 'bbb';
    
    sayName(); // 'bbb'
</script>
Nach dem Login kopieren

Im obigen Code haben wir die von a.js bereitgestellte Funktion sayName zweimal aufgerufen und unterschiedliche Ergebnisse ausgegeben. Dies liegt offensichtlich daran, dass beide Dateien dem Variablennamen Werte zuweisen, sodass sie beide verursachen andere hatten einen Einfluss. Natürlich können wir beim Schreiben von Code darauf achten, keine vorhandenen Variablennamen zu definieren, aber wenn eine Seite auf ein Dutzend Dateien mit mehreren hundert Zeilen verweist, ist es offensichtlich nicht realistisch, sich alle definierten Variablen zu merken.

// file a.js
var name = getName();
var sayName = function() {
    console.log(name)
};
Nach dem Login kopieren
// file b.js
var getName = function() {
    return 'timo';
};
Nach dem Login kopieren
<script src=&#39;xxx/xxx/b.js&#39;></script>
<script src=&#39;xxx/xxx/a.js&#39;></script>

<script>
    sayName(); // 'timo'
</script>
Nach dem Login kopieren
<script src=&#39;xxx/xxx/a.js&#39;></script>
<script src=&#39;xxx/xxx/b.js&#39;></script>

// Uncaught ReferenceError: getName is not defined
Nach dem Login kopieren

Der obige Code zeigt, dass wir bei der Einführung mehrerer Dateien die Reihenfolge sicherstellen müssen, um sicherzustellen, dass beim Ausführen einer bestimmten Datei ihre Abhängigkeiten im Voraus geladen wurden Es ist denkbar, dass wir angesichts größerer Dateien und Projekte mit mehr Abhängigkeiten umgehen müssen, was umständlich und fehleranfällig ist.

Um diese Probleme zu lösen, sind in der Community viele Spezifikationen entstanden, um modulare Funktionen für die JS-Sprache bereitzustellen. Mithilfe dieser Spezifikationen kann unsere Entwicklung komfortabler und sicherer gemacht werden.

Gemeinsame modulare Lösungen

CommonJS

CommonJS ist eine der von der Community vorgeschlagenen modularen Lösungen, und Node.js folgt diesem festgelegten Plan.

Grundlegendes Schreiben

// file a.js
var obj = {
    sayHi: function() {
        console.log('I am timo');
    };
};

module.exports obj;
Nach dem Login kopieren
// file b.js
var Obj = require('xxx/xxx/a.js');

Obj.sayHi(); // 'I am timo'
Nach dem Login kopieren

Im obigen Code ist die Datei a.js der Anbieter des Moduls und die Datei b.js der Aufrufer des Moduls.

Spezifikation

  1. Jede Datei ist ein Modul;

  2. bereitgestellt innerhalb eines ModulsModul Objekt, Darstellung des aktuellen Moduls;

  3. Das Modul verwendet Exporte, um seine eigenen Funktionen/Objekte/Variablen usw. verfügbar zu machen; 🎜> Das Modul importiert andere Module über die Methode

  4. Die Spezifikationen von CommonJS sind einfach die oben genannten 4 Elemente Die Beispiele in der grundlegenden Schreibmethode: Obwohl Node.js in der tatsächlichen Implementierung der CommonJS-Spezifikation folgt, nimmt es dennoch einige Anpassungen daran vor. AMD

  5. AMD ist eine der modularen Spezifikationen, und RequireJS folgt diesem Satz von Spezifikationen.

Grundlegende Verwendung

 // file a.js
 define('module', ['m', './xxx/n.js'], function() {
    // code...
 })
Nach dem Login kopieren

Im obigen Code exportiert die Datei a.js das Modul

Spezifikation

In AMD verwendet das verfügbar gemachte Modul define Funktion

define(moduleName, [], callback);
Nach dem Login kopieren

Wie im obigen Code verfügt die Funktion define über drei Parameter

moduleName. Dieser Parameter kann weggelassen werden und stellt im Allgemeinen den Namen des Moduls dar von geringem Nutzen

    ['name1', 'name2'], der zweite Parameter ist ein Array, das andere Module angibt, von denen das aktuelle Modul abhängt. Wenn es keine abhängigen Module gibt, ist dies der Fall Der Parameter kann weggelassen werden
  • Rückruf, der dritte Parameter ist ein erforderlicher Parameter, es handelt sich um eine Rückruffunktion und im Inneren befindet sich der relevante Code des aktuellen Moduls
  • Andere
  • ADM-Funktionen Es ist der größte Unterschied zwischen der ADM-Spezifikation und der CMD-Spezifikation, die als nächstes eingeführt wird: vor dem Ausführen des Rückrufs Beim aktuell geladenen Modul werden zuerst alle abhängigen Pakete geladen. Dies ist der dritte Schritt der Definitionsfunktion. Die in den beiden Parametern angegebenen abhängigen Pakete.

  • CDM

Grundlegende Schreibmethode

 define(function(require, exports, module) {   
    var a = require('./a')  
    a.doSomething();
    // code... 
    var b = require('./b') 
    // code...
})
Nach dem Login kopieren

Der obige Code ist die grundlegende Schreibmethode des CMD-Spezifikationsexportmoduls;

Spezifikation

Aus der Schreibmethode geht hervor, dass die Schreibmethode von CMD der von AMD sehr ähnlich ist. Der Hauptunterschied ist der Unterschied im Abhängigkeitsladezeitpunkt. Wie oben erwähnt, ist AMD vom Front-End abhängig Die Spezifikation befürwortet einfach das Proximity-Prinzip: Abhängigkeiten werden nicht geladen, bevor das Modul ausgeführt wird. Wenn eine bestimmte Abhängigkeit erforderlich ist, wird sie erneut geladen.

UMD

Wenn CommonJS, AMD und CMD parallel laufen, wird eine Lösung benötigt, die mit ihnen kompatibel ist, sodass wir bei der Entwicklung nicht mehr auf die von uns befolgten Spezifikationen achten müssen abhängige Module, und die Entstehung von UMD soll dieses Problem lösen.

Grundlegende Schreibmethode

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        //AMD
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        //Node, CommonJS之类的
        module.exports = factory(require('jquery'));
    } else {
        //浏览器全局变量(root 即 window)
        root.returnExports = factory(root.jQuery);
    }
}(this, function ($) {
    //方法
    function myFunc(){};
    //暴露公共方法
    return myFunc;
}));
Nach dem Login kopieren

Der obige Code ist die grundlegende Schreibmethode von UMD. Wie aus dem Code ersichtlich ist, kann er sowohl die CommonJS-Spezifikation als auch die AMD-Spezifikation unterstützen.

ES6-Modul

Das Obige stellt jeweils CommonJS, AMD, CMD und UMD vor. Sie sind alle Beiträge der Community zur Modularisierung von JS. Der grundlegende Grund für die Entstehung dieser Spezifikation ist JS-Sprache verfügt derzeit über keine Modularitätsfunktionen. Die JS-eigene Modularisierungslösung kann derzeit durch Modularitätsfunktionen ersetzt werden, die häufig im Browser verwendet werden Seite und Knotenseite.

Die Modularisierungsfunktion in ES6 besteht aus zwei Befehlen:

export

und

import

Der Befehl

export

wird verwendet, um die externe Schnittstelle des zu spezifizieren Modul. Der Befehl import wird zum Importieren von Funktionen verwendet, die von anderen Modulen bereitgestellt werden. ExportbefehlIn ES6 ist eine Datei ein Modul. Die Variablen/Funktionen innerhalb des Moduls sind von außen nicht zugänglich In der Außenwelt können sie von anderen Modulen verwendet werden, indem Sie sie über den Befehl export exportieren

// file a.js
export let a = 1;
export let b = 2;
export let c = 3;
Nach dem Login kopieren
// file b.js
let a = 1;
let b = 2;
let c = 3;

export {a, b, c}
Nach dem Login kopieren
// file c.js
export let add = (a, b) => {
    return a + b;
};
Nach dem Login kopieren

上面三个文件的代码,都是通过export命令导出模块内容的示例,其中a.js文件和b.js文件都是导出模块中的变量,作用完全一致但写法不同,一般我们更推荐b.js文件中的写法,原因是这种写法能够在文件最底部清楚地知道当前模块都导出了哪些变量。

import命令

模块通过export命令导出变量/函数等,是为了让其他模块能够导入去使用,在ES6中,文件导入其他模块是通过import命令进行的

// file d.js
import {a, b, c} from './a.js';
Nach dem Login kopieren

上面的代码中,我们引入了a.js文件中的变量a、b、c,import在引入其他模块内的函数/变量时,必须与原模块所暴露出来的函数名/变量名一一对应。
同时,import命令引入的值是只读的,如果尝试对其进行修改,则会报错

import {a} d from './a.js';
a = 2; // Syntax Error : 'a' is read-only;
Nach dem Login kopieren

export default命令

从上面import的介绍可以看到,当需要引入其他模块时,需要知道此模块暴露出的变量名/函数名才可以,这显然有些麻烦,因此ES6还提供了一个import default命令

// file a.js

let add = (a, b) => {
    return a+b
};
export default add;
Nach dem Login kopieren
// file b.js
import Add from './a.js';

Add(1, 2); // 3
Nach dem Login kopieren

上面的代码中,a.js通过export default命令导出了add函数,在b.js文件中引入时,可以随意指定其名称

export default命令是默认导出的意思,既然是默认导出,显然只能有一个,因此每个模块只能执行一次export default命令,其本质是导出了一个名为default的变量或函数。

Das obige ist der detaillierte Inhalt vonWarum ist Modularität erforderlich? Einführung in gängige modulare Lösungen in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

Verwendung: In JavaScript wird die Methode insertBefore() verwendet, um einen neuen Knoten in den DOM-Baum einzufügen. Diese Methode erfordert zwei Parameter: den neuen Knoten, der eingefügt werden soll, und den Referenzknoten (d. h. den Knoten, an dem der neue Knoten eingefügt wird).

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems Dec 17, 2023 am 08:41 AM

JavaScript ist eine in der Webentwicklung weit verbreitete Programmiersprache, während WebSocket ein Netzwerkprotokoll für die Echtzeitkommunikation ist. Durch die Kombination der leistungsstarken Funktionen beider können wir ein effizientes Echtzeit-Bildverarbeitungssystem erstellen. In diesem Artikel wird erläutert, wie dieses System mithilfe von JavaScript und WebSocket implementiert wird, und es werden spezifische Codebeispiele bereitgestellt. Zunächst müssen wir die Anforderungen und Ziele des Echtzeit-Bildverarbeitungssystems klären. Angenommen, wir haben ein Kameragerät, das Bilddaten in Echtzeit sammeln kann

See all articles