Javascript es6模块中导出对象的正确方法

Javascript es6模块中导出对象的正确方法,javascript,ecmascript-6,es6-modules,Javascript,Ecmascript 6,Es6 Modules,我试图将my模块导出为对象,但导出它似乎是一种“反模式”() 所以我想知道导出一个对象然后将其用作 从“/utils”导入utils ` utils.foo() 现在我是这样做的 /** a.js **/ function foo(){ //... } export { foo } /** b.js **/ import * as utils from "a"; utils.foo() 这样对吗?我是

我试图将my模块导出为对象,但导出它似乎是一种“反模式”()

所以我想知道导出一个对象然后将其用作

从“/utils”导入utils
`

utils.foo()

现在我是这样做的

    /** a.js **/
    function foo(){
      //...
    }

    export {
      foo
    }

    /** b.js **/
    import * as utils from "a";

    utils.foo()
这样对吗?我是否保持摇树功能


谢谢

如果要导入/导出的对象仅包含一些函数(由于
Utils
名称,我假定),则可以按如下方式单独导出函数:

export function doStuff1() {}
export function doStuff2() {}
然后像这样导入:

import {doStuff1, doStuff2} from "./myModule";
但是,如果要导出的对象除了保存方法外还保存状态,则应坚持使用简单的
导出默认myObject
。否则,调用导入的方法将无法正常工作,因为对象的上下文将丢失

例如,以下对象应作为一个整体导出,因为对象的属性应保持封装状态。只有导入和调用
increment
函数不会改变
myObject
,因为无法提供对象的上下文(因为它不是作为一个整体导入的)


es6本机方法:

//file1.es6
导出常量myFunc=(参数)=>{
多斯塔夫(参数)
}
export const otherFunc=({param={}})=>{
doSomething({…param})
}
//文件2.es6
从“/file1.es6”导入{otherFunc}
将*作为MyLib从“/file1.es6”导入
MyLib.myfunc(0)
MyLib.otherFunc({who:'Repley'})
otherFunc({var1:{a1:1}})

等等。

这不是常见的JS语法吗?
const myObject = {
    counter: 0,
    increment: function() {
        this.counter++;
    }
}
export default myObject;