aptos-labs / aptos-wallet-adapter

A monorepo modular wallet adapter for Aptos applications
https://aptos-labs.github.io/aptos-wallet-adapter/
Apache License 2.0
88 stars 97 forks source link

Using Vite results error in dev mode due to cjs and esm modules usage. #409

Open itsmnthn opened 1 month ago

itsmnthn commented 1 month ago

Wrote a simple @moar-market/aptos-wallets-vue: A Nuxt layer using wallet-adapter-core for a personal project.

Using this layer to extend it in Nuxt3 project which uses VIte throws these errors for these dependencies, however production build works fine

// latest eventemitter3 does have esm and cjs exports
Uncaught SyntaxError: The requested module '/_nuxt/@fs/Users/name/proj/node_modules/eventemitter3/index.js?v=03fb350f' does not provide an export named 'default' (at index.mjs?v=03fb350f:1:8)

Uncaught SyntaxError: The requested module '/_nuxt/@fs/Users/name/proj/node_modules/tweetnacl/nacl-fast.js?v=327046d2' does not provide an export named 'default' (at index.mjs?v=327046d2:25:8)

Uncaught SyntaxError: The requested module '/_nuxt/@fs/Users/name/proj/node_modules/ed2curve/ed2curve.js?v=0067c408' does not provide an export named 'default' (at index.mjs?v=0067c408:5:8)

// getting same error for buffer
Uncaught SyntaxError: The requested module '/_nuxt/@fs/Users/nickname/moar/oro/node_modules/buffer/index.js?v=a9cd81b9' does not provide an export named 'Buffer' (at index.mjs?v=a9cd81b9:178:10)

// poseidon-lite : also did return this error but resolving at local package manager level worked

I do have solution to prevent this on dev server but I think this should be addressed at adapter-core or ts-sdk level since using vite also more common

Solution Write alias to resolve correct file in vite config

vite: {
    resolve: {
      alias: {
        eventemitter3: path.resolve(__dirname, 'node_modules/eventemitter3/index.mjs'),
        tweetnacl: path.resolve(__dirname, 'node_modules/tweetnacl/nacl.js'),
        ed2curve: path.resolve(__dirname, 'node_modules/ed2curve/ed2curve.js'),
        buffer: path.resolve(__dirname, 'node_modules/buffer/index.js'),
      },
}

for enforcing new version added these to package.json

{
  "resolutions": {
      "eventemitter3": "^5.0.1",
      "poseidon-lite": "^0.3.0"
    },
}