bitcoinjs-lib icon indicating copy to clipboard operation
bitcoinjs-lib copied to clipboard

ES modules

Open lastmjs opened this issue 6 years ago • 5 comments
trafficstars

It would be great if the library could support ES modules. It would be nice to use an ES module build directly in the browser without a bundler, or use the TypeScript code directly. The use of requires in the source code precludes this

lastmjs avatar Apr 09 '19 04:04 lastmjs

Pull requests are welcome.

If you can get rid of the requires and support ES modules I wouldn't see why that wouldn't be a good thing.

Currently it's not really on any of our radars. Could you maybe explain what the use case is a little bit more?

Thanks.

junderw avatar Apr 09 '19 07:04 junderw

Asking a friend, he recommended we wait for NodeJS to support ES modules.

Since a lot of our dependencies are NodeJS and don't have typescript support, it is difficult at this time.

junderw avatar Apr 09 '19 09:04 junderw

Sounds reasonable, thanks!

On Tue, Apr 9, 2019, 3:24 AM Jonathan Underwood [email protected] wrote:

Asking a friend, he recommended we wait for NodeJS to support ES modules.

Since a lot of our dependencies are NodeJS and don't have typescript support, it is difficult at this time.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/bitcoinjs/bitcoinjs-lib/issues/1380#issuecomment-481174005, or mute the thread https://github.com/notifications/unsubscribe-auth/AGrSjyxpQM_hggHXXfjddIjZzOZE-zQGks5vfFxBgaJpZM4cjmCG .

lastmjs avatar Apr 09 '19 16:04 lastmjs

package.json has a de facto standard module field that when specified is used by most common web bundler tools (like webpack, rollup, browserify w/ a plugin, etc).

This allows the npm package to add a new directory next to src that contains the ES module js files, and a corresponding entry in package.json (for example: "module": "./module/index.js").

The existing src output and "main": "./src/index.js" entry can be left as is, and regular Node projects will be unaffected.

zone117x avatar Apr 09 '19 20:04 zone117x

This should be revisited since ES Modules have had time to cook and get more adoption. It seems like we'd need to migrate a lot of things (like Buffer) to get full browser support though. Supporting Web Crypto (which iirc is now supported in NodeJS) would also change a lot of the APIs to use async.

Thoughts on whether a full ESM library would be better than some sort of hybrid thing? I publish hybrid packages for tiny-secp256k1 and uint8array-tools... but a lot of bundlers still have trouble with them apparently.

junderw avatar Mar 26 '24 15:03 junderw