Package exports mean node version is always used with Webpack 5
gjvoosten opened this issue · comments
Describe the bug
The current package.json
specifies: https://github.com/JSONPath-Plus/JSONPath/blob/v5.0.2/package.json#L7-L10
which, if I read https://webpack.js.org/guides/package-exports/ correctly, mean the node version is always imported, even in browser mode.
We noticed this change in behaviour when our JSONPath queries were suddenly taking much longer to run after upgrading from v4.0.0 to v5.0.2. A query that would take < 3ms under v4.0.0 was suddenly taking > 100ms under v5.0.2. Replacing index-node-esm.mjs
with index-browser-esm.js
would bring the performance back to normal.
From the PR at #146 (comment)
Hmm... I've added a comment at webpack/webpack#11597 (comment) , as it looks to me that bundlers should not be using
type
for interpretation of non-Node fields. There is a workaround there that may work for now without our changing the code, as I really think we should be able to use ".js" with browser ESM while usingtype: commonjs
for Node. If we don't hear back in some time, let's file a new Webpack issue.
Also, when we may be able to revisit this, per the end of https://nodejs.org/api/packages.html#packages_conditional_exports :
...using "node" and "default" condition branches is usually preferable to using "node" and "browser" condition branches.