2017-07-10 3 views
1

Ich möchte unsere JavaScript-Architektur modernisieren - und, was noch wichtiger ist, beginnen Komponententests für unseren JavaScript-Code zu schreiben.javascript: Refactor globale Objekte zu erfordern() Module

Ich habe Informationen aus verschiedenen Fragen/Blogs zusammengefügt und habe einen vorläufigen Plan. Ich bin mir jedoch nicht sicher, ob ich auf dem richtigen Weg bin.

Der Plan:

  1. Umgestalten Komponenten als exportierte Module statt globaler Objekte.
  2. Erstellen Sie einen einzelnen Einstiegspunkt (index.js?), Der erfordert() alle Dateien/Komponenten.
  3. Benutzer Browserify meine browserkompatible statische Datei zu erstellen (zurück zu global).
  4. Verwenden Sie Knoten, Mocha, & Chai, führen Sie Npm Test Tests ausführen, die die exportierbaren Komponenten verweisen.

Das Umgestalten:

Globale Objekte:

// myProject.js 
// -------------------- 
var MyProject = {}; 

// component1.js 
// -------------------- 
myProject.component1 = {}; 

require() Module:

// myProject.js 
// -------------------- 
var component1 = require('./component1'); 
modules.export = { component1 }; 

// component1.js 
// -------------------- 
var component1 = {}; 
modules.exports = component1; 

Die Frage:

Wenn ein Projekt zur globalen Objekte verwendet Namespace-Komponenten, wie kann ich diese JavaS umgestalten? cript Dateien um Module zu exportieren, die im Knoten funktionieren? Folgt der obige Plan den modernen Standards für JavaScript-Abhängigkeiten/Module?

Mein Hauptanliegen ist, dass meine Datei index.js (oder Haupteintrag) ein Wartungsalbtraum wird (Hinzufügen jeder neuen Datei als require()).

+1

Ihre 'index.js' sollten nur Core-Einstiegspunkte (wie Top-Level-Komponenten) benötigen. Andere Dateien werden indirekt benötigt. – SLaks

+0

Das macht sehr viel Sinn, danke, dass Sie darauf hingewiesen haben. Da ich neu im Umgang mit require bin() war mir nicht einmal bewusst, dass ich mich darauf verlassen konnte, dass die Komponenten alles aufkochen. Vielen Dank x1000 – veratti

Antwort

1

Ihre index.js sollte nur Core-Einstiegspunkte (wie Top-Level-Komponenten) erfordern.

Andere Dateien werden indirekt benötigt.

Daher sollten Sie keine riesigen Listen aller Dateien haben; Jede Datei sollte nur Dinge benötigen, die sie direkt verwendet.

Browserify wird eine transitive Schließung aller require() d-Dateien zusammenstellen.

+0

Vielen Dank für das Posten einer Antwort - es löste definitiv meine Hauptsorge mit dem Ansatz. Kann ich das auch so verstehen, dass der Rest meines Plans Ihrer Meinung nach solide auf die anderen Kugeln ist? Ich bin offen für irgendwelche Vorschläge/Kritik - je früher desto besser :) – veratti

+0

'myProject.js' sollte nichts exportieren. – SLaks

+0

Wenn ich richtig verstehe, kann myProject.js effektiv durch index.js ersetzt werden, da es zuvor nur dazu diente, alle anderen Objekte unter einem Namespace zu gruppieren. Wahr? – veratti

Verwandte Themen