Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何扩大出口_Javascript_Node.js_Ecmascript 6 - Fatal编程技术网

Javascript 如何扩大出口

Javascript 如何扩大出口,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我有一个javascript文件,其中我只定义css类,这样我就可以在代码中使用它们,并可以在一个地方维护它们,如下所示: //css.js const pre='grc-'; 常量backdropcss={ 背景:`${pre}background`, }; 常数按钮={ btn:`${pre}btn`, btnSm:`${pre}btn--sm`, btnSecondary:`${pre}btn--secondary`, btintertial:`${pre}btn—第三级`, btnLin

我有一个javascript文件,其中我只定义css类,这样我就可以在代码中使用它们,并可以在一个地方维护它们,如下所示:

//css.js
const pre='grc-';
常量backdropcss={
背景:`${pre}background`,
};
常数按钮={
btn:`${pre}btn`,
btnSm:`${pre}btn--sm`,
btnSecondary:`${pre}btn--secondary`,
btintertial:`${pre}btn—第三级`,
btnLink:`${pre}btn--link`,
btnFull:`${pre}btn--full`,
btnHalf:`${pre}btn--half`,
btnThird:`${pre}btn--third`,
};
//等等。
我用两种方式使用它。对于我的组件库,我喜欢隔离组件的css名称,如下所示:

导出{
钮扣,
警讯,
checkboxcss,
formcss,
radioboxcss,
抽屉,
backdropcss,
兰奇,
};
因此,我只能导入我需要的内容。
但是我还需要一个默认的导出,其中所有的定义都是组合的。 (注意:因此我不想将它们用作
cssjs.buttoncs
,而是用作
cssjs
,它将所有子对象分散到其中)

要创建对象,我将展开所有子对象,然后将其导出为默认值,如下所示:

const cssjs={
…臀部,
…警告CSS,
…复选框CSS,
…formcss,
…radioboxcss,
…抽屉,
…backdropcss,
…范围CSS,
};
导出默认CSSJ;
现在,每次我创建一个新组件时,在这些对象中添加两次都会觉得多余。所以我想创建一个
all
对象:

const all={
钮扣,
警讯,
checkboxcss,
formcss,
radioboxcss,
抽屉,
backdropcss,
兰奇,
};
并将其传播到(指定的)出口:

export{…all}
然后我将编写一些代码来循环遍历
all
对象,并将每个子对象分散到一个大对象中(从以前创建
cssjs
对象)

但是在我能够编写最后一段代码之前,我注意到
export{…all}
语法不受支持。有什么方法可以实现我想要的,或者我必须像现在一样写两遍吗


编辑:

如果在声明时将变量设置为导出,那么重复使用变量会让我措手不及。这是我现在的代码:

//更多定义
导出常量formcss={
formGroup:`${pre}form--group`,
};
导出常量radioboxcss={
收音机:“${pre}收音机”,
radioStacked:“${pre}收音机--堆叠”,
};
导出默认值{
…臀部,
…警告CSS,
…复选框CSS,
…formcss,
…radioboxcss,
…抽屉,
…backdropcss,
…范围CSS,
};
这解决了我的特殊问题,但仍然让我想知道为什么不可能将对象扩展到导出声明中,以便您可以按照对象中的名称导出对象中的所有内容。因此,对于可能通过标题来到这里的其他人:

为什么我可以这样做

const one=1
常数2=2
导出{1,2,}
但不是这个

const one=1
常数2=2
常量数={1,2,}
导出{…数字,}
  • 除非我遗漏了什么,否则您不需要将
    all
    扩展到一个新对象中,只需
    export all

  • 听起来你真正想要的只是普通的命名导出。您可以说
    export const buttoncss=…
    并完全跳过所有内容,而不是将所有内容合并到一个对象中


  • 导出不是对象,即使速记命名的导出语法看起来与速记对象文字语法非常相似。所以没有,实际上没有办法在那里使用扩展语法,这也意味着动态导出名称

    有什么方法可以实现我想要的吗

    为所有单个样式使用命名导出后,可以将自己的模块作为命名空间导入:

    import * as myself from './css.js';
    
    然后,
    imf
    将是一个包含所有导出名称的命名空间对象。您现在可以
    默认值
    -导出使用此对象的内容:

    const all = {};
    for (const p in myself)
        if (p != "default")
            Object.assign(all, myself[p]);
    export { all as default };
    

    请确保将此代码放在模块的末尾,以便
    我自己[p]
    将计算为已初始化的变量。

    1。
    不是我的意思,而是
    2。
    让我觉得自己很愚蠢,因为这正是我需要的。我猜在默认导出时合并它们会让我措手不及,所以在声明它们时我没有考虑导出所有对象。谢谢哇,真令人印象深刻,我不知道你能自我导入。