我正在處理一個使用opensea-js
套件的Vite專案。這個套件依賴xhr2-cookies
,它匯入了os
、http
、https
http、https
和其他其他一些內部的node模組。
當我嘗試呼叫任何opensea方法時,出現了以下錯誤:
Uncaught (in promise) TypeError: os.type不是一個函數 XMLHttpRequest2 xml-http-request.ts:102 prepareRequest httpprovider.js:61 sendAsync httpprovider.js:116 node_modules opensea-js.js:24209
追蹤這個錯誤,發現它來自建構用戶代理字串。
我嘗試安裝rollup-plugin-polyfill-node
並將其添加到vite.config.js
中,但仍然出現相同的錯誤:< ;/p>
import path 從 'path' import vue from '@vitejs/plugin-vue' import nodePolyfills from 'rollup-plugin-polyfill-node' import { defineConfig } from 'vite' // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': path.resolve(__dirname, 'src'), }, }, server: { port: 8080, }, define: { 'process.env': {}, }, build: { rollupOptions: { plugins: [ nodePolyfills(), ], }, }, })
我還嘗試使用patch-package
手動修復文件,這樣可以解決os
錯誤,但在嘗試發送請求時失敗(因為它使用需要進行polyfill的http
/https
模組)。
我使用了
rollup-plugin-polyfill-node
來解決這個問題。這是基於Fabiano的答案的更完整的解決方案:
在我的專案中,我使用了以下配置來解決問題。我在一篇簡短的文章中描述了解決方案。