vite使用nodeJS内置的模块
2023-12-29 00:16:57

项目使用 vite + ts 开发模式正常,build时报错如下

Module "events" has been externalized for browser compatibility, imported by 
".../node_modules/.pnpm/web3-utils@4.1.0/node_modules/web3-utils/lib/esm/event_emitter.js".
 See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.
"EventEmitter" is not exported by "__vite-browser-external", imported by 
"node_modules/.pnpm/web3-utils@4.1.0/node_modules/web3-utils/lib/esm/event_emitter.js".

原因是使用了nodejs模块

// vite.config.ts

import rollupNodePolyFill from 'rollup-plugin-node-polyfills'

export default defineConfig(({ mode }) => {
  ...

  resolve: {
    alias: {
      "@": resolve(__dirname, "src"),
      events: "rollup-plugin-node-polyfills/polyfills/events"
    }
  }
  ...
  build: {
    rollupOptions: {
      plugins: [
          // Enable rollup polyfills plugin
          // used during production bundling
          rollupNodePolyFill()
      ]
    }
  }
})