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

NPM package does not provide an ECMAScript module #72

Open
jameshfisher opened this issue Oct 1, 2020 · 6 comments
Open

NPM package does not provide an ECMAScript module #72

jameshfisher opened this issue Oct 1, 2020 · 6 comments

Comments

@jameshfisher
Copy link

Context: I want to use TensorFlow.js in the browser. I'm using rollup to bundle my app for the browser.

The TensorFlow.js source imports from seedrandom in several places. This comes through in the ES modules distributed via npm.

To find the module seedrandom imported by TensorFlow, I'm using the plugin @rollup/plugin-node-resolve. This does find the node_modules/seedrandom package.

Unfortunately, @rollup/plugin-node-resolve does not find an ECMAScript module in the seedrandom package. So instead, it decides to bundle the seedrandom index.js. But this is a CommonJS module, not an ES module.

As a result, rollup gives me errors like alea is not exported by node_modules/seedrandom/index.js, and the browser gives me errors like require is not defined.

I think the right solution is for the seedrandom package to provide an ES module. The alternative is for TensorFlow to stop importing from a package that doesn't provide an ES module.

(You might say "well you just need to use a CommonJS->ES transpiler, like @rollup/plugin-commonjs". I'm reluctant to do so, because this transformation is gross, and in general, impossible.)

@jameshfisher
Copy link
Author

@davidbau
Copy link
Owner

davidbau commented Oct 1, 2020 via email

@alxAgu
Copy link

alxAgu commented Dec 17, 2020

@jameshfisher, did you manage to get it working? I just came across the exact same issue and followed you here from tensorflow/tfjs#4003.

@jameshfisher
Copy link
Author

Unfortunately not and I haven't had time to work on a PR :( To work around this, I'm currently using the tensorflow.js browser bundle, rather than bundling it myself.

@shanewholloway
Copy link

I created a ESM module based fork called esm-seedrandom. The source is refactored to use ES6+ syntax to allow for treeshaking and to keep the minified output small and modular.

If someone is motivated, we can likely work the ESM fork back into patches for seedrandom using Rollup's various JS output to get CJS, UMD, and IIFE formats without breaking backward compatibility.

@justinfagnani
Copy link

@davidbau is there any chance of upstreaming the changes from @shanewholloway?

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

No branches or pull requests

5 participants