【问题标题】:Using Realm from npm on Electron JS app在 Electron JS 应用程序上使用来自 npm 的 Realm
【发布时间】:2019-01-13 01:30:42
【问题描述】:

我正在尝试使用通过 NPM 导入的 Realm,但它失败了。

我正在为 JavaScript 使用 Realm 示例:

const Realm = require('realm');

// Define your models and their properties
const CarSchema = {
  name: 'Car',
  properties: {
    make:  'string',
    model: 'string',
    miles: {type: 'int', default: 0},
  }
};
const PersonSchema = {
  name: 'Person',
  properties: {
    name:     'string',
    birthday: 'date',
    cars:     'Car[]',
    picture:  'data?' // optional property
  }
};

Realm.open({schema: [CarSchema, PersonSchema]})
  .then(realm => {
    // Create Realm objects and write to local storage
    realm.write(() => {
      const myCar = realm.create('Car', {
        make: 'Honda',
        model: 'Civic',
        miles: 1000,
      });
      myCar.miles += 20; // Update a property value
    });

    // Query Realm for all cars with a high mileage
    const cars = realm.objects('Car').filtered('miles > 1000');

    // Will return a Results object with our 1 car
    cars.length // => 1

    // Add another car
    realm.write(() => {
      const myCar = realm.create('Car', {
        make: 'Ford',
        model: 'Focus',
        miles: 2000,
      });
    });

    // Query results are updated in realtime
    cars.length // => 2
  })
  .catch(error => {
    console.log(error);
  });

这是它抛出的错误:

未捕获的错误:找不到模块 '[路径]/node_modules/realm/compiled/electron-v2.0_darwin_x64/realm.node' 在 Module._resolveFilename (module.js:543:15) 在 Function.Module._resolveFilename ([路径]/node_modules/electron/dist/Electron.app/Contents/Resources/electron.asar/common/reset-search-paths.js:35:12) 在 Function.Module._load (module.js:473:25) 在 Module.require (module.js:586:17) 在要求(内部/module.js:11:18) 在对象。 ([路径]/node_modules/realm/lib/index.js:102:28) 在对象。 ([路径]/node_modules/realm/lib/index.js:133:3) 在 Module._compile (module.js:642:30) 在 Object.Module._extensions..js (module.js:653:10) 在 Module.load (module.js:561:32)

非常感谢您的帮助。

【问题讨论】:

    标签: realm electron npm-install


    【解决方案1】:

    欢迎来到 SO!

    发生的情况是电子指定了自己的环境,而领域运行时根据当前运行的环境加载其二进制文件。

    但是,当使用 npm 安装领域时,我们会在安装时获取与环境对应的二进制文件,即我们的节点引擎。

    因此在开发模式下运行electron时,realm找不到对应electron环境的二进制文件。

    通常的解决方法是使用electron-builder 包并运行它的install-app-deps 命令,这将为电子目标环境安装适当的二进制文件。

    在您的package.json 文件中使其成为自动脚本是usually recommended

    为确保您的原生依赖项始终匹配电子版本,只需添加脚本:

    "scripts": {
      "postinstall": "electron-builder install-app-deps"
    }
    

    …以便在您安装新软件包时运行它。

    【讨论】:

    • 所以不安装就无法调试应用?
    • 提到的“安装”是针对您的realm 包,而不是您的应用程序。
    • 现在即使我在没有安装的情况下运行它也能正常工作。为什么?
    • 我的意思是:我认为 Realm 只有在我使用 electron-builder 构建包时才有效。但是当我调用 npm start 时它似乎也有效
    • 运行electron-builder install-app-deps 命令后,您下载电子版的领域二进制文件。然后即使在电子开发模式(npm start)领域也可以找到合适的二进制文件。
    猜你喜欢
    • 2020-03-25
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多