ES Modules: импортировать именованный экспорт как модуль? - PullRequest
1 голос
/ 07 мая 2019

funcs.js

export function hello() {
  echo 'foo'
}

export function foo() {
  echo 'bar'
}

index.js

import * as Funcs from './funcs.js' // import module, does tree-shaking work?
import { hello } from './funcs.js' // optimise imports, potentially clashes with other imports
import { hello } as Funcs from './funcs.js' // what should make sense, but isn't supported syntax

// this should be straight forward... 
Funcs.hello()

// vs having some random function on top level scope
hello()

// and this shouldn't work if I didn't import it
Funcs.foo()

Это мой вопрос.Имеет ли какое-либо значение дрожание дерева, если я использую форму 1 против формы 2. Форма 2 предпочтительнее для выразительности, но форма 1 - это единственный способ, которым я могу получить все в модуле / пространстве имен.Форма 3 была бы моим предложением, но, возможно, я не знаю кое-что, против чего кто-то еще не спорил, почему это не должно поддерживаться.

Я понятия не имею, куда пойти предложить это, или дажесоздайте плагин babel для этого.

Редактировать: для контекста я работаю с некоторыми более новыми библиотеками (rxjs), которые не предоставляют экспорт по умолчанию, и полагаюсь на разработчиков, чтобы загрузить все необходимые им функции.Так что я не могу контролировать этот экспорт.

Редактировать: было предложено обойти обходной путь: просто создать глобальный файл импорта, который импортирует все глобально необходимые импортные файлы, и экспортирует все это в виде модуля, поэтому я сейчас и делаю.

Редактировать: найдено es-обсудить.Пойду туда вместо того, чтобы надеяться на обсуждение.

https://esdiscuss.org/topic/syntax-to-pick-named-exports-from-a-module

https://esdiscuss.org/topic/proposal-importing-selected-chucks-of-a-module-into-an-object

Редактировать: наиболее интересное обсуждение можно найти здесь.

https://esdiscuss.org/topic/import-foo-bar-as-obj-from-module

Ответы [ 3 ]

1 голос
/ 07 мая 2019

Для формы 3, не могли бы вы просто сделать import { hello as Funcs } from './funcs.js'?

1 голос
/ 10 мая 2019

Оказывается, я не единственный, кто имел эту мысль. В этой теме более подробно рассматриваются некоторые потенциальные проблемы, связанные с этим синтаксисом ... Я не обязательно согласен, но так оно и есть.

https://esdiscuss.org/topic/import-foo-bar-as-obj-from-module

0 голосов
/ 07 мая 2019

Форма 2 выиграет от тряски деревьев.import * означает, что вы не хотите трясти дерево и хотите импортировать все.Таким образом, веб-пакет сделает это.

...