DEV Community

Paul Yu
Paul Yu

Posted on • Originally published at on

Fixing a NodeJS Digital Envelope Routines Error

In my journey to learn Rust, I've decided to pick up this book called "Practical Rust Web Projects" by Shing Lyu.

In the last chapter, you walk through an example of packaging a WebAssembly module using wasm-pack and using the .wasm binary in a NodeJS application. On the step where I needed to compile the application, I ran into the following error:

$ npm run build

> create-wasm-app@0.1.0 build
> webpack --config webpack.config.js

  this[kHandle] = new _Hash(algorithm, xofLen);

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/NormalModule.js:471:10)
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/NormalModule.js:503:5
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/webpack/lib/NormalModule.js:358:12
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at Array.<anonymous> (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
    at Storage.finished (/Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:43:16)
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:79:9
    at /Users/paul/repos/Apress/practical-rust-web-projects/Ch06/hello-wasm/client/node_modules/graceful-fs/graceful-fs.js:78:16
    at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',

Node.js v18.7.0
Enter fullscreen mode Exit fullscreen mode

After a bit of Googling, I ran across someone suggesting to run the following command:

$ export NODE_OPTIONS=--openssl-legacy-provider
Enter fullscreen mode Exit fullscreen mode

Then run the build command again, and it compiled 🎉

$ npm run build

> create-wasm-app@0.1.0 build
> webpack --config webpack.config.js

Hash: 1707689247fe60c788af
Version: webpack 4.42.0
Time: 67ms
Built at: 11/08/2022 7:50:56 PM
                           Asset       Size  Chunks                         Chunk Names
                  0.bootstrap.js   5.31 KiB       0  [emitted]
7e852f2346d8cc54b57a.module.wasm  296 bytes       0  [emitted] [immutable]
                    bootstrap.js     11 KiB    main  [emitted]              main
                      index.html  297 bytes          [emitted]
Entrypoint main = bootstrap.js
[../pkg/hello_wasm.js] 81 bytes {0} [built]
[../pkg/hello_wasm_bg.js] 784 bytes {0} [built]
[../pkg/hello_wasm_bg.wasm] 270 bytes {0} [built]
[./bootstrap.js] 279 bytes {main} [built]
[./index.js] 51 bytes {0} [built]
[./node_modules/webpack/buildin/harmony-module.js] (webpack)/buildin/harmony-module.js 573 bytes {0} [built]
Enter fullscreen mode Exit fullscreen mode

This is definitely not the proper fix in a production scenario, but good enough to get me through the example 😉


Top comments (3)

aqueous911 profile image
sammael • Edited

I'd like to know what the proper fix in a production scenario would be. I encountered this problem while working with an express app in NodeJS.

pauldotyu profile image
Paul Yu

I have not tested this but seems like moving to LTS version of NodeJS or upgrading react-scripts to version 5.x or higher.

lancelet profile image
Jonathan Merritt • Edited

This new PR worked for me:
(In the context of learning Rust + wasm.)

I made the changes manually, then ran npm install, after which npm run start worked as expected.