web-dev-qa-db-ja.com

electronのモジュールをインストールするときのノードモジュールバージョンの競合

シリアルポートからデータを読み取るElectronアプリケーション( https://electron.atom.io/ )を作成しようとしています。私は一般にWebテクノロジーに慣れていないので、JavaScriptを知っていますが、私はC++の男です。

だから私は彼らのクイックスタートをgithubから引っ張って、走った

_npm install && npm start
_

この簡単な作業で、シリアルポートをインストールして実行しようとしました

_npm install serialport
_

テストファイルをインストールして正常に実行した状態で、2つを組み合わせてrequire('serialport')をindex.htmlファイルに配置しようとしました。そこにこれがあると、私はこのエラーを受け取ります:

_Uncaught Error: The module '/home/user/Documents/Programing/Git/Arduino-mpu6050/electron-quick-start/node_modules/serialport/build/Release/serialport.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 51. This version of Node.js requires
NODE_MODULE_VERSION 53. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or`npm install`).
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
    at Object.Module._extensions..node (module.js:598:18)
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at bindings (/home/user/Documents/Programing/Git/Arduino-mpu6050/electron-quick-start/node_modules/bindings/bindings.js:76:44)
    at Object.<anonymous> (/home/user/Documents/Programing/Git/Arduino-mpu6050/electron-quick-start/node_modules/serialport/lib/bindings.js:3:35)
_

それを修正する方法はありますか? Nodeの2つの異なるバージョンを使用していませんが、このエラーが発生するのはなぜですか。

システムOS情報:

_Distributor ID: Ubuntu
Description:    Ubuntu 16.04.2 LTS
Release:    16.04
Codename:   xenial
_
29
Ryan

このタイプのバージョンの不一致が発生した場合、ターゲットNodeバージョンで電子分布を選択するか、npmパッケージを再構築できます。Electronの分布はスキップされているためNode NODE_MODULE_VERSION 51で構成されている(およびv7.4.0にジャンプしている)v7.0.0では、serialportパッケージを再構築する必要があります。

アプリのディレクトリ(package.jsonがある場所)で、

1。インストールelectron-rebuild

npm install --save-dev electron-rebuild


2。再構築

./node_modules/.bin/electron-rebuild



または、より良いオプション-環境変数を最初から設定します。

# Electron's version.
export npm_config_target=1.6.1
# The architecture of Electron, can be ia32 or x64.
export npm_config_Arch=x64
export npm_config_target_Arch=x64
# Download headers for Electron.
export npm_config_disturl=https://atom.io/download/electron
# Tell node-pre-gyp that we are building for Electron.
export npm_config_runtime=electron
# Tell node-pre-gyp to build module from source code.
export npm_config_build_from_source=true
# Install all dependencies, and store cache to ~/.electron-gyp.
HOME=~/.electron-gyp npm install

ネイティブNodeモジュールを使用するためのElectronのドキュメントページをご覧ください。 https://electron.atom.io/docs/tutorial/using-native-node-modules/

45
subwaymatch

electron-rebuild on postinstall

実行内容に応じて、electron-rebuildを使用して、serialportのバージョンを再構築できますelectronをインストールしました。

そうするために:

npm install --save-dev electron-rebuild

$(npm bin)/electron-rebuild                 # Mac and Linux.

.\node_modules\.bin\electron-rebuild.cmd    # Windows.

Npmインストールを実行した後(およびプロジェクトをダウンロードした他のユーザーを支援するため)、これを行うのを忘れていたため、次の2つのスクリプトをpackage.jsonに追加しました。

"scripts": {
  "start": "electron .",

  "postinstall": "electron-rebuild",    
  "electron-rebuild": "electron-rebuild"
},

postinstallnpm installの実行後に自動的に実行されるため、通常のインストールが完了すると、コンソールログメッセージにelectron-rebuildが表示され、serialportが自動的に再構築されます。他のネイティブライブラリをelectronバージョンに。これは、今後electron-rebuildを実行することを考える必要さえないことを意味します。 ????

electron-rebuildを手動で再実行するには、npm run electron-rebuildで実行します。

簡単に、レモンを絞って!

9
Joshua Pinter

コンテンツを含むファイル.npmrcを作成します。

runtime = electron
target = 1.7.5
target_Arch = x64
disturl = https://atom.io/download/atom-Shell
export npm_config_runtime=electron
export npm_config_build_from_source=true

別のターミナルを開き、npm install [yourpackage]を実行します

覚えておいてください、いくつかの新しいパッケージは最高の電子バージョン(ターゲット)でインストールされるので、頭痛/腰痛を軽減し、target =をnpmまたはgithubページに記載されている現在のバージョンで更新します。

3
d9ngle