【问题标题】:Require ('ffi') throws error in Electron applicationRequire ('ffi') 在 Electron 应用程序中抛出错误
【发布时间】:2019-07-31 18:39:10
【问题描述】:

我正在开发一个 Electron.js 应用程序,需要使用 node-ffi 模块来使用 С++ dll 库。我已经安装了模块并尝试将require('ffi') 添加到我的app\electron\main.dev.js 中,但出现错误:

UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The
"path" argument must be of type string. Received type object... 

require('ffi') 按预期工作,例如,在这个简单的project

经过一番调查,我发现...node_modules\bindings\bindings.js 中触发了该错误:

exports.getRoot = function getRoot (file) {
  var dir = dirname(file) // here!

file 在这里未定义...

我的项目是here

完整的错误信息:

UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The >"path" argument must be of type string. Received type object
   at assertPath (path.js:39:11)
   at dirname (path.js:651:5)
   at Function.getRoot 
(D:\JavaScript\ElectronReactBoilerplate4\app\electron\main.prod.js:482:13)
   at bindings 
(D:\JavaScript\ElectronReactBoilerplate4\app\electron\main.prod.js:391:32)
   at Object../node_modules/ref/lib/ref.js 
(D:\JavaScript\ElectronReactBoilerplate4\app\electron\main.prod.js:7148:102)
   at _webpack_require__ 
(D:\JavaScript\ElectronReactBoilerplate4\app\electron\main.prod.js:21:30)
   at Object../node_modules/ffi/lib/ffi.js 
(D:\JavaScript\ElectronReactBoilerplate4\app\electron\main.prod.js:2619:11)
   at _webpack_require__ 
(D:\JavaScript\ElectronReactBoilerplate4\app\electron\main.prod.js:21:30)
   at App.<anonymous> 
(D:\JavaScript\ElectronReactBoilerplate4\app\electron\main.prod.js:196:3)
   at Generator.next (<anonymous>)...

这里有什么魔力?

如何让require('ffi') 在我的项目中工作?

已编辑:
... 将 internals\webpack\webpack.main.dev.js 中的 false 替换为 true

node: {
    __dirname: true,
    __filename: true,
  },

现在错误消息是

(node:16996) UnhandledPromiseRejectionWarning: Error: Could not locate the bindings file. Tried:
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\build\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\build\Debug\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\build\Release\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\out\Debug\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\Debug\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\out\Release\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\Release\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\build\default\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\compiled\10.11.0\win32\ia32\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\addon-build\release\install-root\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\addon-build\debug\install-root\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\addon-build\default\install-root\binding.node
 тЖТ D:\AndrewReactElectron\ElectronReactBoilerplate4\app\lib\binding\node-v69-win32-ia32\binding.node
    at bindings (D:\AndrewReactElectron\ElectronReactBoilerplate4\app\electron\main.prod.js:445:9)

有什么想法吗?

【问题讨论】:

  • 你真的在使用require'ffi'吗?那不是require('ffi')...
  • 终于解决了。刚刚将externals: { ffi: 'ffi' } 添加到我的webpack.main.prod.js

标签: node.js electron react-boilerplate node-ffi


【解决方案1】:

externals: { ffi: 'ffi' } 添加到我的webpack.main.prod.js 已解决问题

【讨论】:

    猜你喜欢
    • 2016-10-10
    • 2019-01-01
    • 2019-09-16
    • 2020-10-15
    • 2021-12-02
    • 2019-12-25
    • 2013-01-26
    • 2015-04-28
    • 2018-12-16
    相关资源
    最近更新 更多