Saya menggunakan webpack@4.43.0 dan mencoba menggunakan perpustakaan perakitan web ini https://github.com/vislyhq /stretch Sesuai dengan dokumen saya mengimpor beberapa kelas darinya yaitu

import { Allocator, Node } from 'stretch-layout';

class Base {
  public layoutNode;

  public constructor() {
    this.layoutNode = new Node(allocator, {});
  }
}

Namun ketika saya mencoba membangunnya dengan webpack (tidak menggunakan loader apa pun dan saya memiliki .wasm di konfigurasi webpack resolve.extensions saya) saya mendapatkan kesalahan berikut

Modul WebAssembly disertakan dalam potongan awal. Ini tidak diperbolehkan, karena unduhan dan kompilasi WebAssembly harus terjadi secara asinkron. Tambahkan splitpoint async (yaitu import()) di suatu tempat antara titik masuk Anda dan modul WebAssembly:

Untuk pemahaman saya, saya perlu menggunakan import() untuk modul ini, tetapi bagaimana cara membuat impor ini tersedia untuk kelas saya? Aplikasi akan gagal karena kita harus menunggu impor itu? Jika saya melakukan sesuatu seperti ini, saya mendapatkan kesalahan yang mengatakan bahwa Allocator dan Node bukan konstruktor.

let Allocator: any = null;
let Node: any = null;

import('stretch-layout').then(module => {
  Allocator = module.Allocator;
  Node = module.Node;
});
5
Ilja 9 Juli 2020, 17:16

1 menjawab

Jawaban Terbaik

Saya dapat menyelesaikan ini menggunakan beta terbaru dari webpack 5, dengan menambahkan flag eksperimental berikut ke config

  experiments: {
    asyncWebAssembly: true,
    importAsync: true
  }

Dengan cara ini Anda tidak perlu khawatir tentang pernyataan import() asinkron sama sekali

5
Ilja 9 Juli 2020, 18:40