Ошибка «Не удается прочитать свойство indexOf из неопределенного» привязки модуля n-api - PullRequest
0 голосов
/ 23 января 2020

Я написал модуль c ++, используя n-api , скомпилировал его с помощью cmake- js и теперь хочу использовать его в моем приложении electron-vue. Если я использую модуль в проекте без electron-vue, он работает. Но когда я пытаюсь использовать его в своем приложении electron-vue, я всегда получаю эту ошибку:

 App threw an error during load
 TypeError: Cannot read property 'indexOf' of undefined
      at Function.getFileName (D:\temp\test2\node_modules\bindings\bindings.js:178:16)
      at bindings (D:\temp\test2\node_modules\bindings\bindings.js:82:48)
      at eval (webpack:///./src/main/index.js?:28:67)
      at Module../src/main/index.js (D:\temp\test2\dist\electron\main.js:3822:1)
      at __webpack_require__ (D:\temp\test2\dist\electron\main.js:21:30)
      at eval (webpack:///./src/main/index.dev.js?:11:1)
      at Object../src/main/index.dev.js (D:\temp\test2\dist\electron\main.js:3810:1)
      at __webpack_require__ (D:\temp\test2\dist\electron\main.js:21:30)
      at eval (webpack:///multi_./src/main/index.dev.js_./src/main/index.js?:1:1)
      at Object.0 (D:\temp\test2\dist\electron\main.js:3880:1)

Я использую привязки примерно так:

const colorBalance = require('bindings')('colorBalance');

Я пытался определить мой модуль как внешний в соответствии с этим , но это не решило проблему:

// vue.config.js
module.exports = {
  pluginOptions: {
    electronBuilder: {
      externals: ['NameOfMyModule']
    }
  }
}

Ответы [ 3 ]

1 голос
/ 23 января 2020

Скорее всего, вы пытаетесь применить метод indexOf к переменной, которая еще не определена. Взгляните на документы https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf. Проверьте, определена ли где-нибудь ваша переменная и должен ли она быть типом массива.

0 голосов
/ 26 января 2020

Я решил свою проблему, изменив цепочку сборки с cmake на gyp. Компиляция с gyp все работает нормально.

0 голосов
/ 25 января 2020

Тем временем я попытался импортировать модуль без bindings:

const colorBalance = require('../../build/Release/colorBalance.node');

Затем я получил новую ошибку:

Error: Cannot open D:\temp\test2\build\Release\colorBalance.node: Error: Module did not self-register.
      at Object.eval (webpack:///./build/Release/colorBalance.node?:1:155)
      at eval (webpack:///./build/Release/colorBalance.node?:2:30)
      at Object../build/Release/colorBalance.node (D:\temp\test2\dist\electron\main.js:97:1)
      at __webpack_require__ (D:\temp\test2\dist\electron\main.js:21:30)
      at eval (webpack:///./src/main/index.js?:28:20)
      at Module../src/main/index.js (D:\temp\test2\dist\electron\main.js:3833:1)
      at __webpack_require__ (D:\temp\test2\dist\electron\main.js:21:30)
      at eval (webpack:///./src/main/index.dev.js?:11:1)
      at Object../src/main/index.dev.js (D:\temp\test2\dist\electron\main.js:3821:1)
      at __webpack_require__ (D:\temp\test2\dist\electron\main.js:21:30)

Я перестроил электрон, используя electron-rebuild. Я прочитал о win_delay_load_hook здесь и попробовал это , но ошибка не исчезла.

...