Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

throw with a clearer exception if using node-only function in browser #49

Closed
wants to merge 1 commit into from

Conversation

severo
Copy link
Contributor

@severo severo commented Dec 10, 2024

As node can now use ES modules, I understand we cannot really have a build for node and a build for browsers. This means we have to check the availability of the 'fs' module at runtime and throw if it's not available (browser).

Maybe my understanding is wrong, but I didn't find clear answers.

fixes #39.

* @param {string} filename
* @returns {Promise<AsyncBuffer>}
*/
export async function asyncBufferFromFile(filename) {
const fsPackage = 'fs' // webpack no include
Copy link
Collaborator

Choose a reason for hiding this comment

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

I think this PR missed the reason for the "webpack no include" hack. If you put await import('fs') then webpack looks at it and says "oh it looks like I need to bundle this too" but then fails because fs is a node system package not available in npm or the browser.

So the problem is not exception handling, it's the bundling.

I think that the solution is to have a conditional export. Possible that asyncBufferFromFile needs to be in its own file to avoid aggressive bundling, but not sure.
https://nodejs.org/api/packages.html#conditional-exports

I'll see if I can get a repro on the bundling issue. I think it happened when I imported from hyperparam or the cli without the string hack.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ohhhh OK. I'll close this PR, and maybe look at this issue later, as it's not super urgent.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

As mentioned in the PR message, I'm not sure if conditional exports is the solution because a Node.js app can use either ESM imports or CJS require.

@severo severo closed this Dec 10, 2024
@severo severo deleted the 39-throw-if-using-fs-in-browser branch December 10, 2024 21:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

remove // webpack no include
2 participants