动态 link 库 (DLL) 初始化例程失败 | nw.js 连接错误 canvas
A dynamic link library (DLL) initialization routine failed | nw.js error connecting canvas
我使用 nw.js 并尝试连接 canvas 模块(node-canvas)时出现此错误。安装不同版本的 node/canvas 没有帮助。错误出现时
require('canvas')
错误图片:
Error
Uncaught Error: A dynamic link library (DLL) initialization routine failed.
\?\N:\BOTSer\Protocol\node_modules\canvas\build\Release\canvas.node
at Object.Module._extensions..node (node:internal/modules/cjs/loader:1224:18)
at Module.load (node:internal/modules/cjs/loader:999:32)
at Function.Module._load (node:internal/modules/cjs/loader:846:12)
at Module.require (node:internal/modules/cjs/loader:1023:19)
at require (node:internal/modules/cjs/helpers:97:18)
at Object.<anonymous> (N:\BOTSer\Protocol\node_modules\canvas\lib\bindings.js:3:18)
at Module._compile (node:internal/modules/cjs/loader:1121:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1179:10)
at Module.load (node:internal/modules/cjs/loader:999:32)
at Function.Module._load (node:internal/modules/cjs/loader:846:12)
```
该模块需要与 Node.js 的全局安装兼容的本机构建。如果 NW.js 中的 Node 版本与您的全局安装不匹配,那么构建的二进制文件将无法使用它。当您切换全局 Node.js 安装版本以匹配 NW.js 中内置的版本时,事情总是会更好。您可以使用 nvm-windows
或 nvm
来控制您的全局节点版本,只需确保在使用节点版本管理器之前先卸载 Node.js ,这样您就不会有两个冲突的全局安装。您可以通过 运行 console.log(process.version);
.
查看 NW.js 中的 Node.js 版本
- https://github.com/nvm-sh/nvm (OSX/Linux)
- https://github.com/coreybutler/nvm-windows (Windows 8+)
- https://github.com/nullivex/nodist (Windows 7)
- https://nwjs.io/versions.json(所有 NW.js 版本数据)
如果我的假设是正确的那么:
- 打开您的应用程序,right-click > 检查 > 控制台 > process.version > 记下您需要的节点版本 > 关闭您的应用程序。
- 删除
node_modules
和package-lock.json
- 全局卸载Node.js
- 为您的 OS
安装正确的节点版本管理器
- 使用节点版本管理器安装您在步骤 1 中记下的版本
- 在您的项目中重新
npm install
并再次尝试 运行
尽管我很困惑为什么您要将原生 canvas
模块与 NW.js 一起使用。为什么要将整个浏览器与内置 canvas 的应用程序打包在一起,然后引入第二个工具并改为使用它?只需使用浏览器的 canvas.
我使用 nw.js 并尝试连接 canvas 模块(node-canvas)时出现此错误。安装不同版本的 node/canvas 没有帮助。错误出现时
require('canvas')
错误图片:
Error
Uncaught Error: A dynamic link library (DLL) initialization routine failed.
\?\N:\BOTSer\Protocol\node_modules\canvas\build\Release\canvas.node
at Object.Module._extensions..node (node:internal/modules/cjs/loader:1224:18)
at Module.load (node:internal/modules/cjs/loader:999:32)
at Function.Module._load (node:internal/modules/cjs/loader:846:12)
at Module.require (node:internal/modules/cjs/loader:1023:19)
at require (node:internal/modules/cjs/helpers:97:18)
at Object.<anonymous> (N:\BOTSer\Protocol\node_modules\canvas\lib\bindings.js:3:18)
at Module._compile (node:internal/modules/cjs/loader:1121:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1179:10)
at Module.load (node:internal/modules/cjs/loader:999:32)
at Function.Module._load (node:internal/modules/cjs/loader:846:12)
```
该模块需要与 Node.js 的全局安装兼容的本机构建。如果 NW.js 中的 Node 版本与您的全局安装不匹配,那么构建的二进制文件将无法使用它。当您切换全局 Node.js 安装版本以匹配 NW.js 中内置的版本时,事情总是会更好。您可以使用 nvm-windows
或 nvm
来控制您的全局节点版本,只需确保在使用节点版本管理器之前先卸载 Node.js ,这样您就不会有两个冲突的全局安装。您可以通过 运行 console.log(process.version);
.
- https://github.com/nvm-sh/nvm (OSX/Linux)
- https://github.com/coreybutler/nvm-windows (Windows 8+)
- https://github.com/nullivex/nodist (Windows 7)
- https://nwjs.io/versions.json(所有 NW.js 版本数据)
如果我的假设是正确的那么:
- 打开您的应用程序,right-click > 检查 > 控制台 > process.version > 记下您需要的节点版本 > 关闭您的应用程序。
- 删除
node_modules
和package-lock.json
- 全局卸载Node.js
- 为您的 OS 安装正确的节点版本管理器
- 使用节点版本管理器安装您在步骤 1 中记下的版本
- 在您的项目中重新
npm install
并再次尝试 运行
尽管我很困惑为什么您要将原生 canvas
模块与 NW.js 一起使用。为什么要将整个浏览器与内置 canvas 的应用程序打包在一起,然后引入第二个工具并改为使用它?只需使用浏览器的 canvas.