Vue3/Vite: Module externalisieren
<p>Ich versuche, einen String mit <code>crypto</code> in einer Vue 3-Anwendung zu hashen. </p>
<pre class="brush:js;toolbar:false;">asynchroner Funktions-Hash (Token) {
const data = new TextEncoder().encode(token)
const byteHash = waiting crypto.subtle.digest("SHA-256", Daten)
// ^ Der folgende Fehler wird hier ausgegeben
const arrayHash = Array.from(new Uint8Array(byteHash))
const hexHash = arrayHash.map(b => b.toString(16).padStart(2, '0')).join('').toLocaleUpperCase()
hexHash zurückgeben
}
</pre>
<p>Soweit ich weiß, ist <code>crypto</code> jetzt in Browsern verfügbar, daher besteht keine Notwendigkeit, stattdessen <code>browserify</code> zu verwenden. </p>
<p>In meiner Browserkonsole ist jedoch der folgende Fehler aufgetreten: </p>
<pre class="brush:js;toolbar:false;">Fehler: Das Modul „crypto“ wurde aus Gründen der Browserkompatibilität nicht aufgerufen.
</pre>
<p>Ich verstehe diesen Fehler als „Vite ist so konfiguriert, dass es das <code>crypto</code>-Modul während des Build-Prozesses externalisiert.“ Aber ich finde eine solche Einstellung nicht in meinem <code>vite.config.js</code>: </p>
<pre class="brush:js;toolbar:false;">// Plugins:
vue aus „@vitejs/plugin-vue“ importieren
Vuetify aus „vite-plugin-vuetify“ importieren
// Dienstprogramme:
importiere { defineConfig } aus 'vite'
importiere { fileURLToPath, URL } aus 'node:url'
// https://vitejs.dev/config/
Standard exportieren defineConfig({
Plugins: [
vue(),
// https://github.com/vuetifyjs/vuetify-loader/tree/next/packages/vite-plugin
vuetify({
autoImport: true
})
],
define: { 'process.env': {} },
lösen: {
alias: {
'@': fileURLToPath(neue URL('./src', import.meta.url))
},
Erweiterungen: ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue']
},
Server: {
Hafen: 3000
},
prüfen: {
setupFiles: ['../vuetify.config.js'],
abhängig: {
inline: ['vuetify']
},
Globals: wahr
}
})
</pre>
<p>Gibt es „integrierte“ Vite-Standardeinstellungen, die dieses Problem verursachen könnten? Ist dieses Problem woanders konfiguriert? Wie kann ich dieses Problem lösen und das Modul <code>crypto</code> </p>