Closed jods4 closed 7 years ago
I was thinking about this originally when adding HMR. Wouldn't aurelia-hot-module-reload
get removed by the tree-shaking algos, if there are no calls to it after importing... given that any usage will be stripped out by Webpack and uglify in production mode.
I observed (as can be seen in the treemaps that I posted in aurelia/framework#692) that it was still there after tree shaking.
I am not sure if webpack removes imports that are not used in the code (to in turn remove the exports)...
Even if it did, in this case the import is used, albeit in a if (false)
branch. Webpack does some flow analysis to decide which dependencies are needed, but it does not evaluate everything.
It could do all that but as of 2.2.0 it doesn't seem to.
EDIT: or maybe it does, because there's another layer of badness:
Removing the import/exports is not everything. It would turn the import to import "aurelia-hot-module-reload"
, which is kept for its possible side-effects.
Webpack tries to completely remove modules, but it needs to prove that they don't have side-effects and very often this is not possible.
I have cut the static dependency on
aurelia-hot-module-reload
and moved it inside theif (module.hot)
branch. This is detected by Webpack, so thataurelia-hot-module-reload
is only bundled when compiled with--hot
. This helps reduce the size of production builds.One thing that I'm not happy with is the literal typing of field
hmrContext
. But to improve that I think we need to exportHmrContext
definition in the DTS ofaurelia-hot-module-reload
in a way that can be consumed from the DTS only with no import (e.g. define in a namespace rather than a module?).