import
is hoisted, meaning transition to import
from require
can be non-trivial if relying on app-wide dependencies to be initialized before use.
$ npm run import
> import-test@0.0.0 import /Users/drewp/GIT/import-test-gist
> babel-node index-import.js
exec a
exec c
exec b
default a from b
state { b: true }
b state: index? undefined
exec index
default a from index
state { b: true, index: true }
index state: index? true
$ npm run require
> import-test@0.0.0 require /Users/drewp/GIT/import-test-gist
> node index-require.js
exec index
exec a
default a from index
state { index: true }
index state: index? true
exec b
exec c
default a from b
state { index: true, b: true }
b state: index? true
The key difference being that state.index
is undefined
when import
ing because they are hoisted, vs true
via require
because it has time to initialize.