2017-06-12 4 views
1

ich die folgende Einstellung erreichen wollen:Zugriff auf Funktionen innerhalb der Schließung von importierten Module

// app.js 
(function() { 
    const add = function() { 
     // add 
    } 
    const substract = function() { 
     // substract 
    } 

    require('./module1'); 
    require('./module2'); 
})() 


// module1.js 
add(); 
substract(); 

Das Problem ist, dass, wenn die Funktionen von innerhalb der module1.js genannt werden, sie nicht definiert sind (das alles ist mit dem Webpack gebündelt).

Ich kenne die Lösung von "Exportieren" und "Importieren" zwischen den verschiedenen Modulen/Dateien. Ich frage mich nur, ob ich dieses Setup erreichen kann, um Importe in den vielen Modulen, die ich verwende, zu vermeiden (stellen Sie sich zum Beispiel vor, sie in 50 Module/Dateien importieren zu müssen).

Was ist der richtige Weg, um diese Einstellung (wenn möglich) zu erreichen?

Vielen Dank im Voraus.

+0

Das Einzige, was Sie sich Sorgen machen müssen ist Ihr Weg für erforderlich module1 und 2. Wenn sie korrekt importiert werden, wird alles gut funktionieren – binariedMe

+1

Wenn Sie diese Funktionen in Modul 1, verwenden möchten, sollten Sie nicht sein tun Sie das andersherum? – Niels

+1

@ binariedMe nein, es wird nicht funktionieren. Die Variablen "add" und "subtract" sind nur innerhalb des _lexical_-Bereichs dieses Closures verfügbar und werden keinem Modul, das darin "benötigt" ist, ausgesetzt. – Alnitak

Antwort

0

dies versuchen, wenn Sie können:

// app.js

(function addSubst() { 
    const add = function() { 
     // add 
    } 
    const substract = function() { 
     // substract 
    } 

    require('./module1'); 
    require('./module2'); 
})() 

// module1.js

import {addSubst} from 'app';//app.js 
add(); 
substract(); 

better explanation and for more languajes here

0

Der Umfang der IIFE Funktion Enden danach nennen es sich selbst und das Innere add, substract Nach dem IIFE werden sie nicht mehr referenzieren. Sie sollten versuchen, beide Variablen aus dieser Datei zu exportieren. Wenn Sie versuchen, die clousure

function currentModule() { 
    const add = function() { 
     // add 
    } 
    const substract = function() { 
     // substract 
    } 
return { add : add, substract : substract} 
}) 
var instanceHere = currentModule(); 
instanceHere.Add(); 
0

So wie ich dies zu erreichen, verwaltet anzuwenden, war ein globales Objekt (Namespace) für meine Anwendung zu erstellen.

(function() { 
    APP = window.APP || {}; 

    APP.add = function() { 
     console.log('Adding...'); 
    } 
    APP.substract = function() { 
     console.log('Substracting...'); 
    } 

    // Import the modules. 
    require('./module1'); 
    require('./module2'); 
})(); 

// module1.js 
APP.add();  // Outputs "Adding..." 
APP.substract(); // Outputs "Substracting..." 
Verwandte Themen