Verwenden Sie vite/rollup.js, um das Betriebssystemmodul von Node.js zu erweitern
P粉176151589
P粉176151589 2023-08-24 16:17:55
0
2
403

Ich arbeite an einem Vite-Projekt, das das Paket opensea-js verwendet. Dieses Paket hängt von xhr2-cookies ab, das os, http, https importiert interne Knotenmodule.

Wenn ich versuche, eine Opensea-Methode aufzurufen, erhalte ich die folgende Fehlermeldung:

Uncaught (in Versprechen) TypeError: os.type ist keine Funktion XMLHttpRequest2 xml-http-request.ts:102 PrepareRequest httpprovider.js:61 sendAsync httpprovider.js:116 node_modules opensea-js.js:24209

Verfolgen Sie diesen Fehler und stellen Sie fest, dass er vom Erstellen der Benutzeragentenzeichenfolge herrührt.

Ich habe versucht, rollup-plugin-polyfill-node zu installieren und es zu vite.config.js hinzuzufügen, aber ich erhalte immer noch die gleiche Fehlermeldung:

Pfad aus „Pfad“ importieren vue aus „@vitejs/plugin-vue“ importieren NodePolyfills aus „rollup-plugin-polyfill-node“ importieren importiere { defineConfig } aus 'vite' // https://vitejs.dev/config/ Standard exportieren defineConfig({ Plugins: [vue()], lösen: { alias: { '@': path.resolve(__dirname, 'src'), }, }, Server: { Port: 8080, }, definieren: { 'process.env': {}, }, bauen: { rollupOptions: { Plugins: [ nodePolyfills(), ], }, }, })

Ich habe auch versucht, die Datei manuell mit patch-package zu reparieren, was den os-Fehler behoben hat, aber beim Versuch, die Anfrage zu senden, ist es fehlgeschlagen polyfillhttp/https

P粉176151589
P粉176151589

Antworte allen (2)
P粉863295057

我使用了rollup-plugin-polyfill-node来解决这个问题。

import nodePolyfills from 'rollup-plugin-polyfill-node'; rollup({ entry: 'main.js', plugins: [ nodePolyfills( /* options */ ) ] })

这是基于Fabiano的答案的更完整的解决方案:

// yarn add --dev @esbuild-plugins/node-globals-polyfill import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill' // yarn add --dev @esbuild-plugins/node-modules-polyfill import { NodeModulesPolyfillPlugin } from '@esbuild-plugins/node-modules-polyfill' import nodePolyfills from 'rollup-plugin-polyfill-node'; export default { optimizeDeps: { esbuildOptions: { // Node.js global to browser globalThis define: { global: 'globalThis' }, // Enable esbuild polyfill plugins plugins: [ NodeGlobalsPolyfillPlugin({ process: true, buffer: true }), NodeModulesPolyfillPlugin() ] } }, build: { rollupOptions: { plugins: [ // Enable rollup polyfills plugin // used during production bundling nodePolyfills() ] } } }
    P粉720716934

    在我的项目中,我使用了以下配置来解决问题。我在一篇简短的文章中描述了解决方案。

    // yarn add --dev @esbuild-plugins/node-globals-polyfill import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill' // yarn add --dev @esbuild-plugins/node-modules-polyfill import { NodeModulesPolyfillPlugin } from '@esbuild-plugins/node-modules-polyfill' // You don't need to add this to deps, it's included by @esbuild-plugins/node-modules-polyfill import rollupNodePolyFill from 'rollup-plugin-node-polyfills' export default { resolve: { alias: { // This Rollup aliases are extracted from @esbuild-plugins/node-modules-polyfill, // see https://github.com/remorses/esbuild-plugins/blob/master/node-modules-polyfill/src/polyfills.ts // process and buffer are excluded because already managed // by node-globals-polyfill util: 'rollup-plugin-node-polyfills/polyfills/util', sys: 'util', events: 'rollup-plugin-node-polyfills/polyfills/events', stream: 'rollup-plugin-node-polyfills/polyfills/stream', path: 'rollup-plugin-node-polyfills/polyfills/path', querystring: 'rollup-plugin-node-polyfills/polyfills/qs', punycode: 'rollup-plugin-node-polyfills/polyfills/punycode', url: 'rollup-plugin-node-polyfills/polyfills/url', string_decoder: 'rollup-plugin-node-polyfills/polyfills/string-decoder', http: 'rollup-plugin-node-polyfills/polyfills/http', https: 'rollup-plugin-node-polyfills/polyfills/http', os: 'rollup-plugin-node-polyfills/polyfills/os', assert: 'rollup-plugin-node-polyfills/polyfills/assert', constants: 'rollup-plugin-node-polyfills/polyfills/constants', _stream_duplex: 'rollup-plugin-node-polyfills/polyfills/readable-stream/duplex', _stream_passthrough: 'rollup-plugin-node-polyfills/polyfills/readable-stream/passthrough', _stream_readable: 'rollup-plugin-node-polyfills/polyfills/readable-stream/readable', _stream_writable: 'rollup-plugin-node-polyfills/polyfills/readable-stream/writable', _stream_transform: 'rollup-plugin-node-polyfills/polyfills/readable-stream/transform', timers: 'rollup-plugin-node-polyfills/polyfills/timers', console: 'rollup-plugin-node-polyfills/polyfills/console', vm: 'rollup-plugin-node-polyfills/polyfills/vm', zlib: 'rollup-plugin-node-polyfills/polyfills/zlib', tty: 'rollup-plugin-node-polyfills/polyfills/tty', domain: 'rollup-plugin-node-polyfills/polyfills/domain' } }, optimizeDeps: { esbuildOptions: { // Node.js global to browser globalThis define: { global: 'globalThis' }, // Enable esbuild polyfill plugins plugins: [ NodeGlobalsPolyfillPlugin({ process: true, buffer: true }), NodeModulesPolyfillPlugin() ] } }, build: { rollupOptions: { plugins: [ // Enable rollup polyfills plugin // used during production bundling rollupNodePolyFill() ] } } }
      Neueste Downloads
      Mehr>
      Web-Effekte
      Quellcode der Website
      Website-Materialien
      Frontend-Vorlage
      Über uns Haftungsausschluss Sitemap
      Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!