从导入的模块访问闭包内的函数

时间:2017-06-12 09:12:51

标签: javascript

我想实现以下设置:

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

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


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

问题是当从module1.js中调用函数时,它们是未定义的(所有这些都与webpack捆绑在一起)。

我知道各种模块/文件之间“导出”和“导入”的解决方案。我只是想知道我是否可以实现这个设置,以避免在我使用的许多模块中导入(想象一下,例如,必须将它们导入50个模块/文件)。

实现此设置的正确方法是什么(如果可能)?

提前完成。

3 个答案:

答案 0 :(得分:0)

如果可以的话,试试这个:

// 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

答案 1 :(得分:0)

IIFE函数的范围在它自己调用之后结束,内部addsubstract,它们将在IIFE之后没有参考,你应该尝试从这个文件中导出两个变量。如果你试图应用clousure

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

答案 2 :(得分:0)

我设法实现这一目标的方法是为我的应用程序创建一个全局对象(命名空间)。

(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..."