Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The module seem to be a WebAssembly module, but module is not flagged as WebAssembly module for webpack

I am trying to import a webassembly module (written in Rust and compiled with wasm-pack) in my Vue project. What I did is I created a project with:

vue-cli create my-vue-webasm-proj

I chose Vue 2. And after that I modified my main.js like this (async beforeCreate() is added):

/* main.js */

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  async beforeCreate() {
    const wlib= await import('my-webasm-lib')
    console.log(wlib)
  },
}).$mount('#app')

After npm run serve I get this error:

Module parse failed: Unexpected character '' (1:0)
The module seem to be a WebAssembly module, but module is not flagged as WebAssembly module for webpack.
BREAKING CHANGE: Since webpack 5 WebAssembly is not enabled by default and flagged as experimental feature.
You need to enable one of the WebAssembly experiments via 'experiments.asyncWebAssembly: true' (based on async modules) or 'experiments.syncWebAssembly: true' (like webpack 4, deprecated).
For files that transpile to WebAssembly, make sure to set the module type in the 'module.rules' section of the config (e. g. 'type: "webassembly/async"').
(Source code omitted for this binary file)

How do I fix it?

I tried to add this configuration into webpack.config.js as it is said without any success:

module.exports = {
  experiments: {
    asyncWebAssembly: true,
    importAsync: true
  }
}

My package.json if following:

...
"dependencies": {
  "core-js": "^3.8.3",
  "my-webasm-lib": "file:../my-webasm-lib/my-webasm-lib-pkg",
  "vue": "^2.6.14"
},
"devDependencies": {
  "@babel/core": "^7.12.16",
  "@babel/eslint-parser": "^7.12.16",
  "@vue/cli-plugin-babel": "~5.0.0",
  "@vue/cli-plugin-eslint": "~5.0.0",
  "@vue/cli-service": "~5.0.0",
  "eslint": "^7.32.0",
  "eslint-plugin-vue": "^8.0.3",
  "vue-template-compiler": "^2.6.14"
},
...
like image 671
Fomalhaut Avatar asked Oct 17 '25 03:10

Fomalhaut


1 Answers

It's a little bit late answer, but maybe may help to someone.

module.exports = {
  runtimeCompiler: true,
  configureWebpack: {
    externals: {
      experiments: {
        asyncWebAssembly: true,
      },
    },
  },
};
like image 177
Angel M. Avatar answered Oct 20 '25 12:10

Angel M.