【问题标题】:Prebuilt electron module distribution预建电子模块分布
【发布时间】:2018-08-18 07:17:46
【问题描述】:

我想为 Electron 的原生 Node.js 插件分发预构建的二进制文件。

据推测 Node ABI 在重大问题之间会发生变化,所以我想知道使用正确版本的 Node.js 运行 node-pre-gyp 是否会削减它,还是我必须运行 electron-rebuild 并发布重建的二进制文件?

一个小实验表明node-pre-gyp在electron环境下运行时找不到编译好的二进制文件。所以看来electron-rebuild 做了一些修补。

【问题讨论】:

    标签: node.js electron node-pre-gyp


    【解决方案1】:

    我查看了electron-builder 的来源,发现它只是在包上运行install

    所以有以下安装钩子就足够了:

    node-pre-gyp install --fallback-to-build
    

    我不再直接使用electron-rebuild,因为我首先生成了正确的二进制文件,但我运行electron-builder install-app-deps,它可能会做类似的事情。

    在这一点上,我认为没有任何理由打扰 prebuildprebuild-install。还有两个依赖项屏蔽了 node-pre-gypnode-gyp 已经实现的内容。

    我为 travis 修改了我的脚本以并行运行节点和电子的构建:

    # build for nodejs
    - npm install --build-from-source
    
    # build for electron
    - npm install --build-from-source --runtime=electron --target=$ELECTRON_VERSION --dist-url=https://atom.io/download/atom-shell
    

    打包步骤必须使用相同的标志运行两次,即:

    - if [[ "${TRAVIS_TAG}" != "" ]]; then npm run package --verbose; fi
    - if [[ "${TRAVIS_TAG}" != "" ]]; then npm run package --runtime=electron --target=$ELECTRON_VERSION --verbose; fi
    

    Travis 和 Appveyor 都支持上传到 Github Releases 或 S3,因此再次使用 prebuildnode-pre-gyp-github 没有任何好处,例如 Travis:

    deploy:
      provider: releases
      api_key:
        secure: ENCRYPTED_KEY
      file_glob: true
      file: build/stage/$PACKAGE_VERSION/*.tar.gz
      skip_cleanup: true
      on:
        tags: true
    

    【讨论】:

      【解决方案2】:

      您可以使用prebuild 为电子创建预构建的二进制文件。我们将它用于leveldown

      https://github.com/prebuild/prebuild

      【讨论】:

      • 酷!你的原生二进制文件是什么,纯node-gypnode-pre-gyp?我想知道,因为npm install 将始终安装节点而不是电子的依赖项。所以我想我仍然需要运行electron-rebuild,如果它们可用的话,它可能会复制节点二进制文件,那么有没有必要为电子提供二进制文件。
      • 正确!您仍然需要electron-rebuild,并且它对于为electron 预构建仍然很有用。我们有一个演示示例,您可以在这里查看github.com/Level/electron-demo
      • 我不得不深入研究electron-rebuild。它支持prebuild-install,因此如果您的模块依赖并使用prebuild-install,那么electron-rebuild 将下载预构建的二进制文件而不是构建它们。
      • 感谢您的回答。它确实帮助我找到了答案并弄清楚了整个事情是如何运作的。但我决定坚持使用 node-pre-gyp/node-gyp 工具。
      猜你喜欢
      • 1970-01-01
      • 2017-06-11
      • 2016-11-18
      • 2012-07-16
      • 2016-09-26
      • 2017-05-25
      • 2014-10-30
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多