使用vite/rollup.js來擴充Node.js的os模組
P粉176151589
2023-08-24 16:17:55
<p>我正在處理一個使用<code>opensea-js</code>套件的Vite專案。這個套件依賴<code>xhr2-cookies</code>,它匯入了<code>os</code>、<code>http</code>、<code>https</code>http</code>、<code>https</code>和其他其他一些內部的node模組。 </p>
<p>當我嘗試呼叫任何opensea方法時,出現了以下錯誤:</p>
<pre class="brush:php;toolbar:false;">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</pre>
<p>追蹤這個錯誤,發現它來自建構用戶代理字串。 </p>
<p>我嘗試安裝<code>rollup-plugin-polyfill-node</code>並將其添加到<code>vite.config.js</code>中,但仍然出現相同的錯誤:< ;/p>
<pre class="brush:php;toolbar:false;">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(),
],
},
},
})</pre>
<p>我還嘗試使用<code>patch-package</code>手動修復文件,這樣可以解決<code>os</code>錯誤,但在嘗試發送請求時失敗(因為它使用需要進行polyfill的<code>http</code>/<code>https</code>模組)。 </p>
我使用了
rollup-plugin-polyfill-node
來解決這個問題。這是基於Fabiano的答案的更完整的解決方案:
在我的專案中,我使用了以下配置來解決問題。我在一篇簡短的文章中描述了解決方案。