Reactjs 在其他计算机上使用本机模块执行electron应用程序时出现JS错误

Reactjs 在其他计算机上使用本机模块执行electron应用程序时出现JS错误,reactjs,opencv,electron,Reactjs,Opencv,Electron,我正在我的电子应用程序中使用(本机模块) 当我打包我的应用程序并尝试在另一台计算机上运行时,我遇到以下错误: A JavaScript error occurred in the main process Uncaught Exception: Error: dlopen(/var/folders/7m/klqbsvis2iqg_mb_pdvv79fhO000gn/ T/.app.repeato.uuz70R, 1): Library not loaded: @rpath/ libopency_

我正在我的电子应用程序中使用(本机模块)

当我打包我的应用程序并尝试在另一台计算机上运行时,我遇到以下错误:

A JavaScript error occurred in the main process
Uncaught Exception:
Error: dlopen(/var/folders/7m/klqbsvis2iqg_mb_pdvv79fhO000gn/
T/.app.repeato.uuz70R, 1): Library not loaded: @rpath/
libopency_core.3.4.dylib
 Referenced from: /var/folders/7m/kiqbsvis2iqg_mb_pdvv79fhOG00gn/
Tf.app.repeato.uuz70R
 Reason: image not found
  at process.module.(anonymous function) (as dlopen} (ELECTRON_ASAR.js:166:20)
  at Object.Module._extensions..node (internal/modules/cjsfosder.js:740:18)
  at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:180:18)
  at Module.load (internal{modules/cjsfoader.js:620:32)
  at tryModuleLoad (internal/modules/cjs/loader.js:559:12)
  at Function.Madule._load {internal/modules/cjs/loader.js:551:3)
  at Module.require (internal/modules/cjs/loader.js:658:17)
  at require (internal/modules/cjs/helpers.js:20:18)
  at Object.<anonymous> (/Applications/Repeato.app/Contents/Resources/app.asar/node_modules/opencv4nodejs/lib/cv.js:17:8)
  at Object.<anonymous> (/Applications/Repeato.app/Contents/Resources/app.asar/node_modules/opencv4nodejs/lib/cv.js:28:3)
还有我的webpack.production.config.js

const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  entry: {
    main: ['babel-polyfill', './app/index'],
    worker: ['babel-polyfill', './app/worker.js']
  },
  mode: 'production',
  output: {
    filename: '[name]-bundle.js',
    path: path.resolve(__dirname, 'static'),
    publicPath: '/static/'
  },
  module: {
    rules: [
      {
        test: /\.node$/,
        use: 'node-loader'
      },
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_compontents)/,
        use: ['babel-loader']
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  },
  plugins: [
    new webpack.NamedModulesPlugin(),
    new webpack.NoEmitOnErrorsPlugin(),
    new HtmlWebpackPlugin({ template: 'index.html', inject: false }),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production')
    })
  ],
  target: 'electron-renderer'
}

您必须将应用程序与OpenCV的共享对象库捆绑在一起。opencv4nodejs包含对opencv安装的libopency_core.3.4.dylib动态库的外部引用。您的机器上有它,但它没有正确安装在出现问题的机器上。您必须随软件包一起提供共享对象库,并针对它们进行正确链接

原因之一可能是electron builder将整个应用程序文件夹完全打包到asar归档文件中。这使得库无法加载。将
“asar”:false
放入package.json文件以防止出现这种情况,并将所有内容保存在文件夹中:

"build": {
    "asar": false,
    ...
另一个可能的原因是您没有将库链接到目标。在binding.gyp中为OpenCV4NodeJ设置相对路径:

"link_settings": {
    "libraries": [
        "-Wl,-rpath,@loader_path/../../../opencv-build/opencv/build/lib"
    ],
},
我认为没有办法让OpenCV4NodeJ从存档加载共享库。如果需要asar,请尝试
asarUnpack

"build": {
    "asarUnpack": [
        ...
    ]
    ...

你能介绍一下你是如何运行这个项目的吗?本机模块主要是特定于平台的,有时操作系统版本也很重要。因此,您可以在打包的应用程序中为另一台计算机包含正确构建的本机模块,或者您的设置应该包括从该计算机上的源代码构建模块。请确保已选中。@Jacob添加了一些信息。您是否正在尝试在windows上自动生成应用程序,但失败了?您的模块是否属于开发人员依赖项的一部分?
"build": {
    "asarUnpack": [
        ...
    ]
    ...