카테고리 없음

wasm-pack을 ES 모듈에서 사용할 때 문제

hyuckkim 2022. 2. 28. 18:00
wasm-pack build --target web

이걸로 웹 어셈블리 코드를 만들면서 생긴 문제이다. wasm-pack은 친절하게도 .wasm 파일과 함께 wasm 파일의 함수를 사용할 수 있는 wasm.js와 wasm.d.ts를 생성했다. 내가 만든 함수들은 export function이 되어 있어서 파일 전체 import만 해주면 사용할 수 있게 되는것이다.

import * as rust from "./pkg/hello_wasm.js

이 명령 하나로 사용할 수 있었다. 타입 체킹을 깐깐하게 하는 타입스크립트/러스트 환경 모두에서 문제가 없어서 당연히 잘 될 줄 알았고, static 서버가 될 테니까 깃허브 페이지에도 올릴 수 있겠지? 하고 올렸다. 그리고 함수를 사용하는 시점에 자바스크립트 오류가 터졌다.

Uncaught TypeError: Cannot read properties of undefined

wasm-pack에서 제공된 wasm.js에서 일어난 문제였고 에러 메시지는 너무 일반적이다. 검색해 봐도 안 나와서 질문 이슈를 올렸다.

Can I use webassembly in github Page? · Issue #2814 · rustwasm/wasm-bindgen

 

Can I use webassembly in github Page? · Issue #2814 · rustwasm/wasm-bindgen

Summary Can I use webassembly in github Page? If so, how to them? Additional Details I made repositorys. https://hyuckkim.github.io/wasm/ https://github.com/hyuckkim/wasm https://github.com/hyuckki...

github.com

올리기 전에 좀 생각해보다 별 생각 없이 깃허브 페이지에서는 웹어셈블리가 안 써지나 라고 생각했다. 그래서 이슈 이름이 저 꼬라지다.

대충 init() 함수가 default로 지정이 돼 있음에도 불구하고 실행이 안 돼서 생긴 문제라고 혼자 추측해봤다. 맞았음.

 

다음 날 일어나서 이슈를 닫고 그냥 wasm_js를 수정해서 init()을 내 파일에서 수동으로 실행했다. 실행은 되는데 러스트 패키지 빌드할 때마다 고쳐줘야 하는 게 고통스러웠다.

 

...라는 게 어제까지 얘기고 오늘 해결 방법을 찾았다.

 

그냥 rust.default()를 실행시켜 주면 됨...

default()라고 돼 있어서 당연히 기본적으로 실행 안 될줄 알았지........