es6如何仅从模块导入一个零件而不执行其他零件

时间:2017-01-06 14:27:22

标签: import ecmascript-6 export browserify

我有一个名为code-style的下一个模块:

import fs from "fs";
import css from "insert-css";

export var master = (function(){
    let styles = fs.readFileSync(__dirname+"/sheets/master.css","utf8");
    css(styles);
    return styles;
})();

export var colors =  (function(){
    let styles = fs.readFileSync(__dirname+"/sheets/colors.css","utf8");
    css(styles);
    return styles;
})();

export var banner =  (function(){
    let styles = fs.readFileSync(__dirname+"/sheets/colors.css","utf8");
    css(styles);
    return styles;
})();

export var busy1 = (function(){
    let styles = fs.readFileSync(__dirname+"/sheets/colors.css","utf8");
    css(styles);
    return styles;
})();

我做了:

import {master} from "code-style";

现在的问题是,当我执行导入时,模块内的所有函数都会执行,但我只想执行master

我不知道如何实现这一点。

我需要保持我的导入状态,并且在导入后无法添加附加代码,功能和函数调用必须保留在模块内。

有什么想法吗?

非常感谢帮助。

Ps:代码在客户端,使用browserify和babel。

1 个答案:

答案 0 :(得分:0)

您使用IIFE(立即调用函数表达式),JavaScript函数在定义后立即运行(在本例中为导入)。将所有IIFE更改为功能,并在需要时调用它们。

例如,这个:

export var colors =  (function(){
    let styles = fs.readFileSync(__dirname+"/sheets/colors.css","utf8");
    css(styles);
    return styles;
})();

应该改为:

export var colors = function(){
    let styles = fs.readFileSync(__dirname+"/sheets/colors.css","utf8");
    css(styles);
    return styles;
};

导入之后调用它,如下所示:     从“代码风格”导入{colors};     颜色();

更改后,您将调用master,并调用函数:

import {master} from "code-style";
const masterCSS = master();