无法在 NW.js 上使用库 - 针对不同的 Node.js 版本使用
Can't use library on NW.js - was compiled against a different Node.js version using
我的问题是我想导入 this library on a desktop app based on NW.js (the template is here).
import Cap from 'cap-rbfork' //set on a vue.js view
当我启动应用程序时,它没有加载页面,我在 window 控制台上收到此错误:
VM245:11 Uncaught Error: The module '/home/user/app/node_modules/cap-rbfork/build/Release/cap.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 83. This version of Node.js requires
NODE_MODULE_VERSION 72. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`). Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Object.Module._extensions..node (:9080/internal/modules/cjs/loader.js:955)
at Module.load (:9080/internal/modules/cjs/loader.js:756)
at Function.Module._load (:9080/internal/modules/cjs/loader.js:669)
at Module.require (:9080/internal/modules/cjs/loader.js:796)
at require (:9080/internal/modules/cjs/helpers.js:68)
at Object.<anonymous> (:9080/home/user/app/node_modules/cap-rbfork/lib/Cap.js:3)
at Module._compile (:9080/internal/modules/cjs/loader.js:893)
at Object.Module._extensions..js (:9080/internal/modules/cjs/loader.js:910)
at Module.load (:9080/internal/modules/cjs/loader.js:756)
at Function.Module._load (:9080/internal/modules/cjs/loader.js:669)
@Jaredcheeda
我按照您的说明,使用您建议的模板创建了一个新的 NWjs 应用程序。
mounted(){
var Cap = this.nw.require('cap-rbfork')
console.log(Cap) //it lists properties
console.log(Cap.Cap.deviceList()) //or Cap.deviceList(), but the app crashes anyway, without reporting the reason, except SIGSEGV
}
如果我从浏览器访问页面,我得到这个错误:
vue.runtime.esm.js?2b0e:1897 Error: Module parse failed: Unexpected character '' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
(Source code omitted for this binary file)
at eval (cap.node:1)
at Object../node_modules/cap-rbfork/build/Release/cap.node (chunk-vendors.js:22)
at __webpack_require__ (app.js:849)
at fn (app.js:151)
at eval (Cap.js?c745:3)
at Object../node_modules/cap-rbfork/lib/Cap.js (chunk-vendors.js:33)
at __webpack_require__ (app.js:849)
at fn (app.js:151)
at VueComponent.mounted (App.vue?234e:37)
at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1863)
我不知道这意味着NW需要降级,所以它可以匹配正确的node-gyp版本。我创建了一个 Electron 项目,然后 answer 解决了一个类似的问题,它成功了。是否有一个 NW 相当于电子重建?
- 完全卸载全局安装的 Node 版本
- 安装节点版本管理器:
- Linux/OSX - https://github.com/nvm-sh/nvm
- Windows 8+ - https://github.com/coreybutler/nvm-windows
- Windows 7 - https://github.com/nullivex/nodist
- 检查 NW.js 内置的 Node 版本
- https://nwjs.io/versions.json
- 或
console.log(process.versions);
在 NW.js
- 使用您选择的
nvm
工具安装并切换到匹配的 Node 版本
- 删除
package-lock.json
和 node_modules
文件夹
- 执行
npm install
这将 download/build 文件特定于您的全局节点版本,该版本应与 NW.js 中内置的版本相匹配
综上所述,Vue-CLI 的 Webpack/Babel 设置旨在 import/bundle/tree-shake 浏览器代码,而不是节点代码。因此,如果涉及本机代码、节点绑定、可执行文件或节点特定代码,import x from 'y'
将不起作用。
NW.js 使用 require
而不是 import
来处理导入节点模块。
如果 Node-GYP/NW-GYP 有问题,您可能还需要更改 NW.js 版本:
我的问题是我想导入 this library on a desktop app based on NW.js (the template is here).
import Cap from 'cap-rbfork' //set on a vue.js view
当我启动应用程序时,它没有加载页面,我在 window 控制台上收到此错误:
VM245:11 Uncaught Error: The module '/home/user/app/node_modules/cap-rbfork/build/Release/cap.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 83. This version of Node.js requires
NODE_MODULE_VERSION 72. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`). Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Object.Module._extensions..node (:9080/internal/modules/cjs/loader.js:955)
at Module.load (:9080/internal/modules/cjs/loader.js:756)
at Function.Module._load (:9080/internal/modules/cjs/loader.js:669)
at Module.require (:9080/internal/modules/cjs/loader.js:796)
at require (:9080/internal/modules/cjs/helpers.js:68)
at Object.<anonymous> (:9080/home/user/app/node_modules/cap-rbfork/lib/Cap.js:3)
at Module._compile (:9080/internal/modules/cjs/loader.js:893)
at Object.Module._extensions..js (:9080/internal/modules/cjs/loader.js:910)
at Module.load (:9080/internal/modules/cjs/loader.js:756)
at Function.Module._load (:9080/internal/modules/cjs/loader.js:669)
@Jaredcheeda
我按照您的说明,使用您建议的模板创建了一个新的 NWjs 应用程序。
mounted(){
var Cap = this.nw.require('cap-rbfork')
console.log(Cap) //it lists properties
console.log(Cap.Cap.deviceList()) //or Cap.deviceList(), but the app crashes anyway, without reporting the reason, except SIGSEGV
}
如果我从浏览器访问页面,我得到这个错误:
vue.runtime.esm.js?2b0e:1897 Error: Module parse failed: Unexpected character '' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
(Source code omitted for this binary file)
at eval (cap.node:1)
at Object../node_modules/cap-rbfork/build/Release/cap.node (chunk-vendors.js:22)
at __webpack_require__ (app.js:849)
at fn (app.js:151)
at eval (Cap.js?c745:3)
at Object../node_modules/cap-rbfork/lib/Cap.js (chunk-vendors.js:33)
at __webpack_require__ (app.js:849)
at fn (app.js:151)
at VueComponent.mounted (App.vue?234e:37)
at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1863)
我不知道这意味着NW需要降级,所以它可以匹配正确的node-gyp版本。我创建了一个 Electron 项目,然后 answer 解决了一个类似的问题,它成功了。是否有一个 NW 相当于电子重建?
- 完全卸载全局安装的 Node 版本
- 安装节点版本管理器:
- Linux/OSX - https://github.com/nvm-sh/nvm
- Windows 8+ - https://github.com/coreybutler/nvm-windows
- Windows 7 - https://github.com/nullivex/nodist
- 检查 NW.js 内置的 Node 版本
- https://nwjs.io/versions.json
- 或
console.log(process.versions);
在 NW.js
- 使用您选择的
nvm
工具安装并切换到匹配的 Node 版本 - 删除
package-lock.json
和node_modules
文件夹 - 执行
npm install
这将 download/build 文件特定于您的全局节点版本,该版本应与 NW.js 中内置的版本相匹配
综上所述,Vue-CLI 的 Webpack/Babel 设置旨在 import/bundle/tree-shake 浏览器代码,而不是节点代码。因此,如果涉及本机代码、节点绑定、可执行文件或节点特定代码,import x from 'y'
将不起作用。
NW.js 使用 require
而不是 import
来处理导入节点模块。
如果 Node-GYP/NW-GYP 有问题,您可能还需要更改 NW.js 版本: