You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vite/Rollup项目中为opensea-js依赖的Node核心模块做Polyfill

问题根因

opensea-js依赖的xhr2-cookies是专为Node.js环境设计的包,默认会调用Node内置的os/http/https等模块,而Vite默认不会在浏览器环境注入这些Node核心模块的polyfill。你之前的配置只给生产构建的Rollup流程添加了polyfill,开发阶段的Vite DevServer走Esbuild预构建逻辑,不会触发该配置,所以报错依然存在。

方案1(更轻量,推荐):直接替换xhr2-cookies

浏览器环境本身自带原生XMLHttpRequest实现,完全不需要xhr2-cookies的模拟能力,直接把该包替换成浏览器原生实现即可,无需安装额外polyfill:

  1. 新建src/mocks/xhr2-cookies.js文件,内容如下:
export const XMLHttpRequest = window.XMLHttpRequest
export default { XMLHttpRequest }
  1. 修改vite.config.js的resolve.alias配置,添加别名映射:
import path from 'path'
import vue from '@vitejs/plugin-vue'
import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
      // 新增这行,把xhr2-cookies指向你写的mock文件
      'xhr2-cookies': path.resolve(__dirname, 'src/mocks/xhr2-cookies.js')
    },
  },
  server: {
    port: 8080,
  },
  define: {
    'process.env': {},
    // 补充global定义,避免其他Node包报错
    global: 'window'
  }
})
  1. 删除本地node_modules/.vite缓存目录后重启项目即可。
方案2:全量注入Node核心模块Polyfill

如果需要保留xhr2-cookies的完整能力,可以配置同时覆盖开发+生产环境的Node polyfill:

  1. 安装额外依赖:
npm install @esbuild-plugins/node-globals-polyfill @esbuild-plugins/node-modules-polyfill rollup-plugin-polyfill-node --save-dev
  1. 修改vite.config.js完整配置如下:
import path from 'path'
import vue from '@vitejs/plugin-vue'
import nodePolyfills from 'rollup-plugin-polyfill-node'
import { defineConfig } from 'vite'
import NodeGlobalsPolyfillPlugin from '@esbuild-plugins/node-globals-polyfill'
import NodeModulesPolyfillPlugin from '@esbuild-plugins/node-modules-polyfill'

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
      // 手动指定核心模块的polyfill路径
      os: 'rollup-plugin-polyfill-node/polyfills/os',
      http: 'rollup-plugin-polyfill-node/polyfills/http',
      https: 'rollup-plugin-polyfill-node/polyfills/https'
    },
  },
  server: {
    port: 8080,
  },
  define: {
    'process.env': {},
    global: 'window'
  },
  // 开发环境Esbuild预构建注入polyfill
  optimizeDeps: {
    esbuildOptions: {
      plugins: [
        NodeGlobalsPolyfillPlugin({
          process: true,
          buffer: true
        }),
        NodeModulesPolyfillPlugin()
      ]
    }
  },
  // 生产环境Rollup构建注入polyfill
  build: {
    rollupOptions: {
      plugins: [
        nodePolyfills()
      ]
    }
  }
})
  1. 删除node_modules/.vite缓存后重启项目即可。

内容的提问来源于stack exchange,提问作者Benedict Lewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:09:05