【问题标题】:es6 How to import only one part from module and don't execute other partses6 如何从模块中只导入一个部分而不执行其他部分
【发布时间】:2017-01-06 14:27:22
【问题描述】:

我有以下称为代码样式的模块:

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。

【问题讨论】:

  • JS文件必须全部执行——不能随意阻止JS运行。您可以将其进一步拆分,或更改模块的使用方式。
  • 好的,我明白了,你会如何分解它?
  • 单独的文件。不过,IMO Ori 的解决方案更好——这是您可以明确控制函数何时被调用的唯一方法。

标签: import ecmascript-6 export browserify


【解决方案1】:

您使用 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();

【讨论】:

  • 是的,我之前已经这样做了,现在想省略这个额外的调用
  • 在这种情况下需要额外的调用。
猜你喜欢
  • 2015-07-19
  • 2019-07-18
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多