$ rustup target add wasm32-unknown-unknown
info: downloading component 'rust-std' for 'wasm32-unknown-unknown' info: installing component 'rust-std' for 'wasm32-unknown-unknown' 20.1 MiB / 20.1 MiB (100 %) 4.9 MiB/s in 4s $ cargo binstall wasm-bindgen-cli INFO resolve: Resolving package: 'wasm-bindgen-cli' WARN The package wasm-bindgen-cli v0.2.105 (x86_64-unknown-linux-musl) has been downloaded from github.com INFO This will install the following binaries: INFO - wasm-bindgen => /home/tomoyan/.cargo/bin/wasm-bindgen INFO - wasm-bindgen-test-runner => /home/tomoyan/.cargo/bin/wasm-bindgen-test-runner INFO - wasm2es6js => /home/tomoyan/.cargo/bin/wasm2es6js Do you wish to continue? [yes]/no ? INFO Installing binaries... INFO Done in 13.319376311s
$ bun install
bun install v1.3.1 (89fa0f34) [149.72ms] migrated lockfile from package-lock.json + @open-wc/webpack-import-meta-loader@0.4.7 + buefy@0.8.20 + codemirror@5.65.16 + css-loader@3.6.0 + file-loader@6.2.0 + style-loader@1.3.0 + vue@2.7.16 + vue-loader@15.11.1 + vue-template-compiler@2.7.16 + wasm-pack@0.12.1 + @types/codemirror@0.0.96 + @wasm-tool/wasm-pack-plugin@1.7.0 + copy-webpack-plugin@5.1.2 + git-revision-webpack-plugin@3.0.6 + raw-loader@4.0.2 + rimraf@3.0.2 + webpack@4.47.0 + webpack-cli@3.3.12 + webpack-dev-server@3.11.3 + workerize-loader@1.3.0 661 packages installed [13.24s] Blocked 1 postinstall. Run `bun pm untrusted` for details.
$ bun pm untrusted
bun pm untrusted v1.3.1 (89fa0f34) ./node_modules/wasm-pack @0.12.1 » [postinstall]: node ./install.js These dependencies had their lifecycle scripts blocked during install. If you trust them and wish to run their scripts, use `bun pm trust`.
**Terser/Webpack エラー(digital envelope routines::unsupported)
原因: Node.js 17以降で (OpenSSL 3.0) で Webpack 4 + Terser が MD4 ハッシュをサポートしなくなった。
$ bun run build
$ rimraf dist pkg && webpack
🧐 Checking for wasm-pack...
✅ wasm-pack is installed at /home/tomoyan/my_projects/_crates_src/playground/node_modules/.bin/wasm-pack.
ℹ️ Compiling your crate in release mode...
[INFO]: 🎯 Checking for the Wasm target...
[INFO]: 🌀 Compiling to Wasm...
warning: Found `debug_assertions` in `target.'cfg(...)'.dependencies`. This value is not supported for selecting dependencies and will not work as expected. To learn more visit https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#platform-specific-dependencies
Compiling unicode-ident v1.0.20
Compiling proc-macro2 v1.0.101
Compiling quote v1.0.41
Compiling wasm-bindgen-shared v0.2.104
Compiling portable-atomic v1.11.1
Compiling serde_core v1.0.228
Compiling rustversion v1.0.22
Compiling bumpalo v3.19.0
Compiling syn v2.0.107
Compiling log v0.4.28
Compiling serde_json v1.0.145
Compiling serde v1.0.228
Compiling wasm-bindgen v0.2.104
Compiling ryu v1.0.20
Compiling itoa v1.0.15
Compiling memchr v2.7.6
Compiling once_cell v1.21.3
Compiling cfg-if v1.0.4
Compiling autocfg v1.5.0
Compiling libc v0.2.177
Compiling crunchy v0.2.4
Compiling version_check v0.9.5
Compiling tiny-keccak v2.0.2
Compiling ahash v0.8.11
Compiling smartstring v1.0.1
Compiling num-traits v0.2.19
Compiling getrandom v0.2.16
Compiling zerocopy v0.7.35
Compiling wasm-bindgen-backend v0.2.104
Compiling const-random-macro v0.1.16
Compiling const-random v0.1.18
Compiling static_assertions v1.1.0
Compiling wasm-bindgen-macro-support v0.2.104
Compiling thin-vec v0.2.14
Compiling smallvec v1.15.1
Compiling bitflags v2.10.0
Compiling serde_derive v1.0.228
Compiling rhai_codegen v3.1.0
Compiling wasm-bindgen-macro v0.2.104
Compiling js-sys v0.3.81
Compiling console_error_panic_hook v0.1.7
Compiling web-sys v0.3.81
Compiling instant v0.1.13
Compiling rhai v1.23.3
Compiling rhai-playground v0.2.1 (/home/tomoyan/my_projects/_crates_src/playground)
warning: use of deprecated associated function `wasm_bindgen::JsValue::from_serde`: causes dependency cycles, use `serde-wasm-bindgen` or `gloo_utils::format::JsValueSerdeExt` instead
--> src/scripting.rs:92:14
|
92 | JsValue::from_serde(&res).unwrap()
| ^^^^^^^^^^
|
= note: `#[warn(deprecated)]` on by default
warning: `rhai-playground` (lib) generated 1 warning
Finished `release` profile [optimized] target(s) in 1m 53s
[INFO]: ⬇️ Installing wasm-bindgen...
[INFO]: Optimizing wasm binaries with `wasm-opt`...
Error: invalid type: map, expected a string at line 2 column 18
Caused by: invalid type: map, expected a string at line 2 column 18
Hash: 3e0c2fac679e24749860
Version: webpack 4.47.0
Time: 197745ms
Built at: 2025/11/11 2:21:56
97 assets
Entrypoint index = index.js
[0] ./pkg/index.js 23.1 KiB {0} [built]
[1] ./js/wasm_loader.js + 1 modules 946 bytes {0} [built]
| ./js/wasm_loader.js 860 bytes [built]
| ./pkg/index_bg.wasm 81 bytes [built]
[2] (webpack)/buildin/global.js 472 bytes {0} [built]
[3] ./js/index.js 1.24 KiB {0} [built]
[4] (webpack)/buildin/harmony-module.js 573 bytes {0} [built]
[6] ./js/init.js + 26 modules 54.2 KiB {2} [built]
| ./js/init.js 652 bytes [built]
| ./js/playground.vue 665 bytes [built]
| ./js/playground.vue?vue&type=template&id=edbf0ef0&scoped=true 283 bytes [built]
| ./js/playground.vue?vue&type=script&lang=js 424 bytes [built]
| ./node_modules/@open-wc/webpack-import-meta-loader/webpack-import-meta-loader.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--4!./node_modules/vue-loader/lib??vue-loader-options!./js/playground.vue?vue&type=template&id=edbf0ef0&scoped=true 19.6 KiB [built]
| ./node_modules/@open-wc/webpack-import-meta-loader/webpack-import-meta-loader.js!./node_modules/vue-loader/lib??vue-loader-options!./js/playground.vue?vue&type=script&lang=js 11.9 KiB [built]
| ./js/playground-runner.js 4.51 KiB [built]
| + 20 hidden modules
[17] ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib??vue-loader-options!./js/playground.vue?vue&type=style&index=0&id=edbf0ef0&prod&scoped=true&lang=css 703 bytes {2} [built]
[18] ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib??vue-loader-options!./js/playground.vue?vue&type=style&index=1&id=edbf0ef0&prod&lang=css 691 bytes {2} [built]
[39] ./example-scripts lazy nonrecursive ./node_modules/raw-loader/dist/cjs.js \.rhai$ 160 bytes {2} [built]
[41] ./js/playground.vue?vue&type=style&index=0&id=edbf0ef0&prod&scoped=true&lang=css 293 bytes {2} [built]
[43] ./js/playground.vue?vue&type=style&index=1&id=edbf0ef0&prod&lang=css 281 bytes {2} [built]
[210] ./node_modules/buefy/dist/esm/dropdown.js + 2 modules 18 KiB {1} [built]
| 3 modules
[211] ./node_modules/buefy/dist/esm/select.js + 2 modules 7.89 KiB {1} [built]
| 3 modules
[212] ./node_modules/buefy/dist/esm/field.js + 1 modules 8.43 KiB {1} [built]
| 2 modules
[213] ./node_modules/buefy/dist/esm/tooltip.js + 1 modules 2.52 KiB {1} [built]
| 2 modules
+ 245 hidden modules
ERROR in index.js from Terser
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:79:19)
at Object.createHash (node:crypto:139:10)
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/terser-webpack-plugin/dist/index.js:217:37
at Array.forEach (<anonymous>)
at TerserPlugin.optimizeFn (/home/tomoyan/my_projects/_crates_src/playground/node_modules/terser-webpack-plugin/dist/index.js:160:259)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:7:1)
at AsyncSeriesHook.lazyCompileHook (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/Hook.js:154:20)
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/webpack/lib/Compilation.js:1409:36
at AsyncSeriesHook.eval [as callAsync] (eval at create (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/Hook.js:154:20)
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/webpack/lib/Compilation.js:1405:32
at eval (eval at create (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:12:1)
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/git-revision-webpack-plugin/lib/build-file.js:12:9
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/git-revision-webpack-plugin/lib/helpers/run-git-command.js:22:7
at ChildProcess.exithandler (node:child_process:414:7)
at ChildProcess.emit (node:events:519:28)
at maybeClose (node:internal/child_process:1105:16)
at Socket.<anonymous> (node:internal/child_process:457:11)
at Socket.emit (node:events:519:28)
at Pipe.<anonymous> (node:net:339:12)
参考: node.js - Error message "error:0308010C:digital envelope routines::unsupported" - Stack Overflow
$ bun run build
ERROR in index.js from Terser
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:79:19)
at Object.createHash (node:crypto:139:10)
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/terser-webpack-plugin/dist/index.js:217:37
at Array.forEach (<anonymous>)
at TerserPlugin.optimizeFn (/home/tomoyan/my_projects/_crates_src/playground/node_modules/terser-webpack-plugin/dist/index.js:160:259)
at AsyncSeriesHook.eval [as callAsync] (eval at create (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:7:1)
at AsyncSeriesHook.lazyCompileHook (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/Hook.js:154:20)
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/webpack/lib/Compilation.js:1409:36
at AsyncSeriesHook.eval [as callAsync] (eval at create (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/Hook.js:154:20)
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/webpack/lib/Compilation.js:1405:32
at eval (eval at create (/home/tomoyan/my_projects/_crates_src/playground/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:12:1)
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/git-revision-webpack-plugin/lib/build-file.js:12:9
at /home/tomoyan/my_projects/_crates_src/playground/node_modules/git-revision-webpack-plugin/lib/helpers/run-git-command.js:22:7
at ChildProcess.exithandler (node:child_process:414:7)
at ChildProcess.emit (node:events:519:28)
at maybeClose (node:internal/child_process:1105:16)
at Socket.<anonymous> (node:internal/child_process:457:11)
at Socket.emit (node:events:519:28)
at Pipe.<anonymous> (node:net:339:12)
Nodeに従来のOpenSSLプロバイダを使用するように指示する🤔
$ node -v
v20.17.0
$ echo "export NODE_OPTIONS=--openssl-legacy-provider" >> ~/.zshrc $ . ~/.zshrc
ビルドを再実行する😉
$ bun run build
$ bun run build
$ rimraf dist pkg && webpack
🧐 Checking for wasm-pack...
✅ wasm-pack is installed at /home/tomoyan/my_projects/_crates_src/playground/node_modules/.bin/wasm-pack.
ℹ️ Compiling your crate in release mode...
[INFO]: 🎯 Checking for the Wasm target...
[INFO]: 🌀 Compiling to Wasm...
warning: Found `debug_assertions` in `target.'cfg(...)'.dependencies`. This value is not supported for selecting dependencies and will not work as expected. To learn more visit https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#platform-specific-dependencies
warning: use of deprecated associated function `wasm_bindgen::JsValue::from_serde`: causes dependency cycles, use `serde-wasm-bindgen` or `gloo_utils::format::JsValueSerdeExt` instead
--> src/scripting.rs:92:14
|
92 | JsValue::from_serde(&res).unwrap()
| ^^^^^^^^^^
|
= note: `#[warn(deprecated)]` on by default
warning: `rhai-playground` (lib) generated 1 warning
Finished `release` profile [optimized] target(s) in 0.08s
[INFO]: ⬇️ Installing wasm-bindgen...
[INFO]: Optimizing wasm binaries with `wasm-opt`...
Error: invalid type: map, expected a string at line 2 column 18
Caused by: invalid type: map, expected a string at line 2 column 18
Hash: 6a94cd648bf8ca9406d5
Version: webpack 4.47.0
Time: 38439ms
Built at: 2025/11/11 6:09:19
Asset Size Chunks Chunk Names
0a18f28127d6a468f280.worker.js 13.1 KiB [emitted] [immutable]
1.js 318 KiB 1 [emitted] [big]
10.js 2.69 KiB 10 [emitted]
11.js 2.8 KiB 11 [emitted]
12.js 2.56 KiB 12 [emitted]
13.js 2.39 KiB 13 [emitted]
14.js 1.69 KiB 14 [emitted]
15.js 2.2 KiB 15 [emitted]
16.js 1.99 KiB 16 [emitted]
17.js 1.95 KiB 17 [emitted]
18.js 2.96 KiB 18 [emitted]
19.js 2.32 KiB 19 [emitted]
2.js 22.7 KiB 2 [emitted]
20.js 2.87 KiB 20 [emitted]
21.js 2.97 KiB 21 [emitted]
22.js 1.46 KiB 22 [emitted]
23.js 1.06 KiB 23 [emitted]
24.js 2.55 KiB 24 [emitted]
25.js 2.19 KiB 25 [emitted]
26.js 1.75 KiB 26 [emitted]
27.js 2.78 KiB 27 [emitted]
28.js 1.96 KiB 28 [emitted]
29.js 1.72 KiB 29 [emitted]
3.js 407 KiB 3 [emitted] [big]
30.js 837 bytes 30 [emitted]
31.js 2.9 KiB 31 [emitted]
32.js 4.3 KiB 32 [emitted]
33.js 2.19 KiB 33 [emitted]
34.js 2.96 KiB 34 [emitted]
35.js 3.12 KiB 35 [emitted]
36.js 3.28 KiB 36 [emitted]
37.js 2.89 KiB 37 [emitted]
38.js 2.38 KiB 38 [emitted]
39.js 5.4 KiB 39 [emitted]
4.js 2.26 KiB 4 [emitted]
40.js 2.14 KiB 40 [emitted]
41.js 2.45 KiB 41 [emitted]
42.js 2.74 KiB 42 [emitted]
43.js 990 bytes 43 [emitted]
44.js 1.25 KiB 44 [emitted]
45.js 2.01 KiB 45 [emitted]
46.js 2.36 KiB 46 [emitted]
47.js 2.71 KiB 47 [emitted]
48.js 2.15 KiB 48 [emitted]
49.js 2.35 KiB 49 [emitted]
5.js 2.34 KiB 5 [emitted]
50.js 2.35 KiB 50 [emitted]
51.js 2.77 KiB 51 [emitted]
52.js 1.79 KiB 52 [emitted]
53.js 2.07 KiB 53 [emitted]
54.js 2.29 KiB 54 [emitted]
55.js 2.72 KiB 55 [emitted]
56.js 5.66 KiB 56 [emitted]
57.js 1.03 KiB 57 [emitted]
58.js 2.21 KiB 58 [emitted]
59.js 2.04 KiB 59 [emitted]
6.js 8.06 KiB 6 [emitted]
60.js 2.7 KiB 60 [emitted]
61.js 2.73 KiB 61 [emitted]
62.js 2.43 KiB 62 [emitted]
63.js 2.41 KiB 63 [emitted]
64.js 3.3 KiB 64 [emitted]
65.js 2.53 KiB 65 [emitted]
66.js 2.17 KiB 66 [emitted]
67.js 3.34 KiB 67 [emitted]
68.js 2.27 KiB 68 [emitted]
69.js 227 bytes 69 [emitted]
7.js 2.23 KiB 7 [emitted]
70.js 216 bytes 70 [emitted]
71.js 393 bytes 71 [emitted]
72.js 749 bytes 72 [emitted]
73.js 779 bytes 73 [emitted]
74.js 656 bytes 74 [emitted]
75.js 561 bytes 75 [emitted]
76.js 671 bytes 76 [emitted]
77.js 269 bytes 77 [emitted]
78.js 537 bytes 78 [emitted]
79.js 393 bytes 79 [emitted]
8.js 394 bytes 8 [emitted]
80.js 437 bytes 80 [emitted]
81.js 439 bytes 81 [emitted]
82.js 306 bytes 82 [emitted]
83.js 324 bytes 83 [emitted]
84.js 1.17 KiB 84 [emitted]
85.js 1.53 KiB 85 [emitted]
86.js 210 bytes 86 [emitted]
87.js 230 bytes 87 [emitted]
88.js 232 bytes 88 [emitted]
89.js 875 bytes 89 [emitted]
8ebcf2753aab07fa0274e404bf08f573.wasm 1.38 MiB [emitted] [immutable] [big]
9.js 26.2 KiB 9 [emitted]
90.js 359 bytes 90 [emitted]
91.js 1.53 KiB 91 [emitted]
92.js 5.32 KiB 92 [emitted]
93.js 914 bytes 93 [emitted]
94.js 209 bytes 94 [emitted]
COMMITHASH 40 bytes [emitted]
VERSION 7 bytes [emitted]
index.html 1.07 KiB [emitted]
index.js 14.2 KiB 0 [emitted] index
Entrypoint index = index.js
[0] ./pkg/index.js 23.1 KiB {0} [built]
[1] ./js/wasm_loader.js + 1 modules 946 bytes {0} [built]
| ./js/wasm_loader.js 860 bytes [built]
| ./pkg/index_bg.wasm 81 bytes [built]
[2] (webpack)/buildin/global.js 472 bytes {0} [built]
[3] ./js/index.js 1.24 KiB {0} [built]
[4] (webpack)/buildin/harmony-module.js 573 bytes {0} [built]
[6] ./js/init.js + 26 modules 54.2 KiB {2} [built]
| ./js/init.js 652 bytes [built]
| ./js/playground.vue 665 bytes [built]
| ./js/playground.vue?vue&type=template&id=edbf0ef0&scoped=true 283 bytes [built]
| ./js/playground.vue?vue&type=script&lang=js 424 bytes [built]
| ./node_modules/@open-wc/webpack-import-meta-loader/webpack-import-meta-loader.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--4!./node_modules/vue-loader/lib??vue-loader-options!./js/playground.vue?vue&type=template&id=edbf0ef0&scoped=true 19.6 KiB [built]
| ./node_modules/@open-wc/webpack-import-meta-loader/webpack-import-meta-loader.js!./node_modules/vue-loader/lib??vue-loader-options!./js/playground.vue?vue&type=script&lang=js 11.9 KiB [built]
| ./js/playground-runner.js 4.51 KiB [built]
| + 20 hidden modules
[17] ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib??vue-loader-options!./js/playground.vue?vue&type=style&index=0&id=edbf0ef0&prod&scoped=true&lang=css 703 bytes {2} [built]
[18] ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib??vue-loader-options!./js/playground.vue?vue&type=style&index=1&id=edbf0ef0&prod&lang=css 691 bytes {2} [built]
[39] ./example-scripts lazy nonrecursive ./node_modules/raw-loader/dist/cjs.js \.rhai$ 160 bytes {2} [built]
[41] ./js/playground.vue?vue&type=style&index=0&id=edbf0ef0&prod&scoped=true&lang=css 293 bytes {2} [built]
[43] ./js/playground.vue?vue&type=style&index=1&id=edbf0ef0&prod&lang=css 281 bytes {2} [built]
[210] ./node_modules/buefy/dist/esm/dropdown.js + 2 modules 18 KiB {1} [built]
| 3 modules
[211] ./node_modules/buefy/dist/esm/select.js + 2 modules 7.89 KiB {1} [built]
| 3 modules
[212] ./node_modules/buefy/dist/esm/field.js + 1 modules 8.43 KiB {1} [built]
| 2 modules
[213] ./node_modules/buefy/dist/esm/tooltip.js + 1 modules 2.52 KiB {1} [built]
| 2 modules
+ 245 hidden modules
WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
This can impact web performance.
Assets:
8ebcf2753aab07fa0274e404bf08f573.wasm (1.38 MiB)
1.js (318 KiB)
3.js (407 KiB)
Child worker:
Asset Size Chunks Chunk Names
0a18f28127d6a468f280.worker.js 13.1 KiB 0 [emitted] [immutable] main
8ebcf2753aab07fa0274e404bf08f573.wasm 1.38 MiB [emitted] [immutable] [big]
Entrypoint main = 0a18f28127d6a468f280.worker.js
[0] ./pkg/index.js 23.1 KiB {0} [built]
[1] (webpack)/buildin/harmony-module.js 573 bytes {0} [built]
[2] (webpack)/buildin/global.js 472 bytes {0} [built]
[3] ./node_modules/workerize-loader/dist/rpc-worker-loader.js!./node_modules/@open-wc/webpack-import-meta-loader/webpack-import-meta-loader.js!./js/worker.js + 2 modules 2.61 KiB {0} [built]
| ./node_modules/workerize-loader/dist/rpc-worker-loader.js!./node_modules/@open-wc/webpack-import-meta-loader/webpack-import-meta-loader.js!./js/worker.js 1.69 KiB [built]
| ./js/wasm_loader.js 860 bytes [built]
| ./pkg/index_bg.wasm 81 bytes [built]