Skip to content
This repository has been archived by the owner on May 22, 2024. It is now read-only.

fix: detect native bindings and change extension priority #353

Merged
merged 7 commits into from
Mar 3, 2021

Conversation

eduardoboucas
Copy link
Member

@eduardoboucas eduardoboucas commented Mar 1, 2021

- Summary

This PR changes the order of resolveExtensions to prefer .js files over .mjs. This fixes an issue with the node-fetch module. More information at evanw/esbuild#363 (comment).

Additionally, it removes an optimisation for external modules which, as @erezrokah pointed out, can introduce problems with different versions of the same module. It feels dangerous to be risking problems that are difficult to troubleshoot due to what may well be a premature optimisation.

Finally, it adds an esbuild plugin that detects Node bindings (via a direct require call to a .node file) and adds the corresponding file to the zip, avoiding a fallback to ZISI.

- Test plan

Added a test specifically for node-fetch and amended the test for modules with native bindings.

- Description for the changelog

fix: detect native bindings and change extension priority

- A picture of a cute animal (not mandatory but encouraged)

hamster

@eduardoboucas eduardoboucas added bug Something isn't working type: bug code to address defects in shipped code and removed bug Something isn't working labels Mar 1, 2021
@eduardoboucas eduardoboucas changed the title fix: add esbuild plugin for node-fetch fix: detect native bindings and change extension priority Mar 2, 2021
@eduardoboucas eduardoboucas marked this pull request as ready for review March 2, 2021 15:31
@ehmicky ehmicky self-requested a review March 2, 2021 16:28
@@ -35,6 +44,8 @@ const bundleJsFile = async function ({
outfile: bundlePath,
nodePaths: additionalModulePaths,
platform: 'node',
plugins,
resolveExtensions: ['.js', '.jsx', '.mjs', '.cjs', '.json'],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should .es6 be added? This is an old extension that was used in the past when ES6 became a thing.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! I'll make a note to do some testing and add that in a subsequent PR.

@eduardoboucas eduardoboucas merged commit 198e154 into master Mar 3, 2021
@ehmicky ehmicky deleted the feat/esbuild-improvements-6 branch March 3, 2021 14:03
Skn0tt pushed a commit to netlify/build that referenced this pull request May 21, 2024
…p-it-and-ship-it#353)

* fix: remove externalModules optimisation

* fix: add esbuild plugin for node-fetch

* chore: skip esbuild plugins in Node 8

* feat: add plugin for native bindings

* chore: fix ESLint warning

* chore: pass populated context to plugins

* chore: fix tests
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
type: bug code to address defects in shipped code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants