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()
That's my question. Does it make any difference to tree-shaking if I'm using form 1 vs form 2. Form 2 is preferable for expressiveness, but form 1 is the only way I can get everything into a module/namespace. Form 3 would be my suggestion, but maybe I don't know something that someone hasn't already argued against why this shouldn't be supported.
I have no idea where to go suggest this, or even to build a babel plugin to do this.
Edit: for context, I'm working with some newer libraries (rxjs) that don't expose default exports, and rely on developers to load all the functions they need. So I don't have control over those exports.
Edit: a workaround that was suggested was to simply create a global import file that imports all the globally required imports, and exports it all as a module, so that's what I'm doing for now.
Edit: found es-discuss. Will go there instead to forward discussion hopefully.
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
Edit: most enlightening discussion found here.
https://esdiscuss.org/topic/import-foo-bar-as-obj-from-module