webpack.js.org
webpack.js.org copied to clipboard
Document webpack change: add exportsFields and conditionNames options
A pull request by @vankop was merged and maintainers requested a documentation change.
See pull request: https://github.com/webpack/webpack/pull/10953
What kind of change does this PR introduce? closes #9509 exports field feature support
Did you add tests for your changes?
Yes
Does this PR introduce a breaking change?
No
What needs to be documented once your changes are merged?
Webpack now supports exports field entrypoint.
Regarding to conditional exports webpack core supports the following conditions:
- "import" - matched when the package is loaded via
importorimport() - "require" - matched when the package is loaded via
require() - "node" - matched when
options.targetis node or electron environment - "electron" - matched when
options.targetis electron environment - "browser" - matched when
options.targetis web environment - "worker" - matched when
options.target === "webworker" - "development" - matched when
options.mode === "development" - "webpack"
- "default"
Added some parameters to options.resolve option:
options.resolve.conditionNamesa list of exports field condition names, default list described above in "conditional exports" sectionoptions.resolve.exportsFieldsa list of exports fields in description files, default is["exports"]options.resolve.byDependencyextra resolve options per dependency category. Typical categories are "commonjs", "amd", "esm". This option allows to define specific resolving to each dependency category, e.g. disallow extensions foresm:
module.exports = {
resolve: {
byDependency: {
"esm": {
"extensions": []
}
}
}
};
I started on some documentation here: https://gist.github.com/sokra/e032a0f17c1721c71cfced6f14516c62
The exportsFields documentation is extremely lacking. Questions I have include:
- What is the default value for this field?
- Will the value I supply override the default or be merged with the default?
- If the conditions I supply are merged with the default, will the new values will take precedence over the default values? What's the answer to this question for
mainFields? - If I specify something like
importhere will that cause it to always be applied or to be applied conditionally only whenimportis being used? - If the conditions I supply override the default, an example would be helpful because I guess I would need to check
process.env.NODE_ENVto setproductionordevelopmentappropriately and that would be easy to overlook from the current docs