Mi piacerebbe distribuire binari precompilati per un add-on Node.js nativo per Electron.
Presumibilmente il Nodo ABI cambia tra i dossi principali quindi mi chiedo se è in esecuzione node-pre-gyp
con la versione corretta di Node.js lo taglierò o devo correre electron-rebuild
e pubblicare i binari ricostruiti?
Un piccolo esperimento ha mostrato che node-pre-gyp non poteva trovare il binario compilato quando è in esecuzione in un ambiente di elettroni. electron-rebuild
fa qualcosa per aggiustarlo.
risposte:
1 per risposta № 1Puoi usare prebuild
per creare binari precompilati per l'elettrone. Lo usiamo per leveldown
.
https://github.com/prebuild/prebuild
1 per risposta № 2
Ho guardato attraverso le fonti di electron-builder
e ha scoperto che funziona semplicemente install
sul pacchetto.
Quindi avere il seguente hook di installazione è sufficiente:
node-pre-gyp install --fallback-to-build
Io non uso electron-rebuild
direttamente dal momento che produco i binari giusti in primo luogo, ma corro electron-builder install-app-deps
che probabilmente fa simili.
Non vedo alcun motivo per cui preoccuparsi prebuild
e prebuild-install
a questo punto. Sono altre due dipendenze che proteggono cosa node-pre-gyp
e node-gyp
entrambi già implementano.
Ho modificato il mio script per travis per eseguire parallelamente i build per node ed electron:
# 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
La fase di confezionamento deve essere eseguita due volte con le stesse bandiere, vale a dire:
- if [[ "${TRAVIS_TAG}" != "" ]]; then npm run package --verbose; fi
- if [[ "${TRAVIS_TAG}" != "" ]]; then npm run package --runtime=electron --target=$ELECTRON_VERSION --verbose; fi
Sia Travis che Appveyor supportano i caricamenti su Github Releases o S3, quindi ancora nessun guadagno dall'uso prebuild
o node-pre-gyp-github
, esempio per 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