Правильный способ экспорта объекта в модуль es6

1

Я пытаюсь экспортировать мой модуль в качестве объекта, но экспорт выглядит как "анти-шаблон" (https://medium.com/@rauschma/note-that-default-exporting-objects-is-usually-an-anti -pattern-if-you-want-to-export-the-cf674423ac38)

Поэтому мне было интересно, какой правильный способ экспортировать объект, а затем использовать его как

import utils from "./utils" "

utils.foo()

В настоящее время я так делаю

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

    export {
      foo
    }

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

    utils.foo()

Правильно ли это так? Поддерживаю ли я древовидную функцию?

Спасибо

Теги:
ecmascript-6
es6-modules

2 ответа

0

es6 для этого:

// file1.es6
export const myFunc = (param) => {
  doStuff(param)
}

export const otherFunc = ({ param = {} }) => {
  doSomething({ ...param })
}

// file2.es6
import { otherFunc } from './file1.es6'
import * as MyLib from './file1.es6'

MyLib.myfunc(0)
MyLib.otherFunc({ who: 'Repley' })
otherFunc({ var1: { a1: 1 } })

И так далее.

  • 0
    это не синтаксис CommonJS?
0

Если объект, который вы хотите импортировать/экспортировать, содержит только некоторые функции (как я полагаю, из-за имени Utils), вы можете экспортировать функции отдельно следующим образом:

export function doStuff1() {}
export function doStuff1() {}

И импортируйте вот так:

import {doStuff1, doStuff2} from "./myModule";

Однако, если объект, который вы хотите экспортировать, содержит состояние в дополнение к методам, вы должны придерживаться простого export default myObject. В противном случае вызов импортированных методов не будет работать должным образом, поскольку контекст объекта будет потерян.

В качестве примера, следующий объект должен быть экспортирован в целом, так как свойства объекта должны оставаться инкапсулированными. Только импорт и вызов функции increment не будет мутировать myObject поскольку контекст объекта не может быть предоставлен (поскольку он не импортируется в целом).

const myObject = {
    counter: 0,
    increment: function() {
        this.counter++;
    }
}
export default myObject;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню