Vue3/Vite : externaliser les modules
<p>J'essaie de hacher une chaîne en utilisant <code>crypto</code> </p>
<pre class="brush:js;toolbar:false;">hachage de fonction async (jeton) {
const data = nouveau TextEncoder().encode(jeton)
const byteHash = wait crypto.subtle.digest("SHA-256", données)
// ^ l'erreur ci-dessous est renvoyée ici
const arrayHash = Array.from (nouveau Uint8Array (byteHash))
const hexHash = arrayHash.map(b => b.toString(16).padStart(2, '0')).join('').toLocaleUpperCase()
retourner hexHash
}
≪/pré>
<p>Pour autant que je sache, <code>crypto</code> est désormais disponible dans les navigateurs, il n'est donc pas nécessaire d'utiliser <code>browserify</code> </p>
<p>Cependant, j'ai rencontré l'erreur suivante dans la console du navigateur : </p>
<pre class="brush:js;toolbar:false;">Erreur : le module "crypto" a été externalisé pour des raisons de compatibilité avec le navigateur. Impossible d'accéder à "crypto.subtle" dans le code client.
≪/pré>
<p>Je comprends cette erreur comme suit : "Vite est configuré pour externaliser le module <code>crypto</code> pendant le processus de construction." Mais je ne trouve pas un tel paramètre dans mon <code>vite.config.js</code> : </p>
<pre class="brush:js;toolbar:false;">// Plugins :
importer la vue depuis '@vitejs/plugin-vue'
importer vuetify depuis 'vite-plugin-vuetify'
// Utilitaires :
importer {defineConfig} depuis 'vite'
importer { fileURLToPath, URL } depuis 'node:url'
// https://vitejs.dev/config/
exporter la définition par défaut ({
plugins : [
vue(),
// https://github.com/vuetifyjs/vuetify-loader/tree/next/packages/vite-plugin
vuetify({
autoImport : vrai
})
],
définir : { 'process.env' : {} },
résoudre: {
pseudo : {
'@' : fileURLToPath(nouvelle URL('./src', import.meta.url))
},
extensions : ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue']
},
serveur : {
port : 3000
},
test: {
setupFiles : ['../vuetify.config.js'],
dépôts : {
en ligne : ['vuetify']
},
globales : vrai
}
})
≪/pré>
<p>Existe-t-il des paramètres par défaut Vite « intégrés » qui pourraient provoquer ce problème ? Ce problème est-il configuré ailleurs ? Comment puis-je résoudre ce problème et utiliser le module <code>crypto</code> </p>