How to rebuild native npm modules for Electron?


#1

Please help me to understand how to rebuild the native npm modules for Electron 1.6.2?

I used steps from https://electron.atom.io/docs/tutorial/quick-start to create a simple Electron application.
Then I installed ref package and loaded it in main.js.
ref package - it is the native package. I have to rebuild this package to have ability to use it in the Electron application.

I used following tutorial to rebuild the native package - https://github.com/electron/electron/blob/master/docs/tutorial/using-native-node-modules.md

There are 3 approaches how to rebuild the native npm packages:

  1. “Installing modules and rebuilding for Electron using electron-rebuild”:
    I installed electron-rebuild npm package.
    Then, according to tutorial, I need just to run following command:
    .\node_modules.bin\electron-rebuild.cmd
    But electron-rebuild tried to download https://atom.io/download/electron/v1.6.2/iojs-v1.6.2.tar.gz
    Why it downloaded something from https://atom.io/download/electron if Electron release files are located here - https://github.com/electron/electron/releases?
    Electron 1.6.2 was released only few weeks ago, but iojs-v1.6.2.tar.gz was released in Mar 2015.
    Do I understand correctly that electron-rebuild downloads the wrong files?

  2. Manually building packages for Electron using node-gyp.
    set HOME=%USERPROFILE%/.electron-gyp
    cd ./node_modules/ref
    node-gyp rebuild --target=1.6.2 --arch=x64 --dist-url=https://atom.io/download/electron

And here again dist-url uses https://atom.io/download/electron.
Why?
I tried do not use --dist-url.
But in this case node-gyp downloads following files:
gyp http GET https://iojs.org/download/release/v1.6.2/iojs-v1.6.2.tar.gz
gyp http 200 https://iojs.org/download/release/v1.6.2/iojs-v1.6.2.tar.gz
gyp http GET https://iojs.org/download/release/v1.6.2/SHASUMS256.txt
gyp http GET https://iojs.org/download/release/v1.6.2/win-x64/iojs.lib
gyp http GET https://iojs.org/download/release/v1.6.2/win-x86/iojs.lib
gyp http 200 https://iojs.org/download/release/v1.6.2/SHASUMS256.txt
gyp http 200 https://iojs.org/download/release/v1.6.2/win-x64/iojs.lib
gyp http 200 https://iojs.org/download/release/v1.6.2/win-x86/iojs.lib
Is it correct?

  1. Rebuild native packages using npm:
    rem # Electron’s version.
    set npm_config_target=1.6.2
    rem # The architecture of Electron, can be ia32 or x64.
    set npm_config_arch=x64
    set npm_config_target_arch=x64
    rem # Download headers for Electron.
    rem set npm_config_disturl=https://atom.io/download/electron
    rem # Tell node-pre-gyp that we are building for Electron.
    set npm_config_runtime=electron
    rem # Tell node-pre-gyp to build module from source code.
    set npm_config_build_from_source=true
    rem # Install all dependencies, and store cache to ~/.electron-gyp.
    set HOME=%USERPROFILE.electron-gyp
    npm install

Again https://atom.io/download/electron.
Why?

Does anyone know how to rebuild ref native package for Electron 1.6.2 correctly?


#2

No, electron-rebuild downloads the correct files, I forget why they’re named iojs but it doesn’t really matter.


#3

I do not understand.
Electron 1.6.2 was released only 15 days ago.
iojs.org/download/release/v1.6.2/iojs-v1.6.2.tar.gz was created 2 years ago - 23-Mar-2015.
Why does electron-rebuild use very old iojs-v1.6.2.tar.gz to rebuild the native npm package with new Electron 1.6.2?


#4

According to the tutorial I should specify the version of Electron, not Node.
See https://github.com/electron/electron/blob/master/docs/tutorial/using-native-node-modules.md

Electron’s version.

export npm_config_target=1.2.3

The --target=1.2.3 is version of Electron.

electron-rebuild --help
Usage: electron-rebuild --version [version] --module-dir [path]
Options:
-v, --version The version of Electron to build against

Why does electron-builder/node-gyp uses version of Electron as version of Node?


#5

Ok, now I understand that electron-rebuild really uses old iojs-v1.6.2.tar.gz to rebuild native packages for new Electron.
I can rebuild ref package for x64 architecture and use it in my Electron application.
cd .\node_modules\ref
"D:\tools\nodejs\node.exe" “C:\tmp\test\node_modules\node-gyp\bin\node-gyp.js” “rebuild” “–target=1.6.1” “–arch=x64” “–build-from-source” --nodedir=D:\tools\iojs-v1.6.1
And it works.

But when I try to rebuild ref package for 3b bit architecture and set --arch=ia32 then Electron cannot start and complains that “Error: %1 is not a valid Win32 application”.

What could be the problem?