预建电子模块分布

时间:2018-03-09 16:51:51

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

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

推测Node ABI在主要颠簸之间发生变化,所以我想知道使用正确版本的Node.js运行Traceback (most recent call last): File "<ipython-input-4-0f3256299055>", line 3, in <module> tn.write("GET /index.html HTTP/1.1\nHost:"+HOST+"\n\n") File "C:\Users\FP\Anaconda3\lib\telnetlib.py", line 287, in write if IAC in buffer: TypeError: 'in <string>' requires string as left operand, not bytesenter code here 是要削减它还是我必须运行node-pre-gyp并发布重建的二进制文件?

一个小实验表明,在电子环境中运行时,节点pre-gyp无法找到编译后的二进制文件。所以似乎electron-rebuild做了一些补丁。

2 个答案:

答案 0 :(得分:1)

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

https://github.com/prebuild/prebuild

答案 1 :(得分: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