質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

解決済

Node.jsむけBLEライブラリnoble実行で「Error: Cannot find module 'xpc-connection'」が出る。

OKstyle-Tokyo
OKstyle-Tokyo

総合スコア16

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

2回答

1グッド

1クリップ

1172閲覧

投稿2019/01/22 14:04

前提・実現したいこと

MacBook Air (11-inch, Early 2015,)OS X Yosemiteバーション10.10.5でBLEデータを受け取るセントラルにしようとしています。
① Node.jsをnode.jsの本家サイトからダウンロード
② nobleのインストール
③ 下記「実行したソースコードの「app.js」ファイルを作成
④ BLEデータの受け取りができるか、Node.jsむけBLEライブラリのnobleを使用したapp.jsファイルをターミナルで実行しました。
そうしたところ以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

Nakamu-no-MacBook-Air-8:ble_central nakamu$ node app.js internal/modules/cjs/loader.js:583 throw err; ^ Error: Cannot find module 'xpc-connection' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) at Function.Module._load (internal/modules/cjs/loader.js:507:25) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:22:18) at Object.<anonymous> (/Users/nakamu/Desktop/ble_central/node_modules/noble/lib/mac/yosemite.js:7:21) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3)

実行したソースコード

Node.js

1'use strict'; 2 3const noble = require('noble'); 4const serviceuuid = `a6ad91bd376e465f8c6c460fd3e15038`; 5const charauuid = `80d881a61ab347f08c752c31eac31f43`; 6 7//キャラクタリスティックにアクセスしてデータやりとり 8const accessChara = (chara) => { 9 console.log('-----Start GATT Access-----') 10 chara.notify(true, (err) => { 11 if (err) { 12 console.log('listen notif error', err) 13 } else { 14 console.log('listen notif') 15 } 16 }); 17 chara.on('data', (data, isNotif) => { 18 const jsonStr = data.toString('utf-8'); 19 const jsonData = JSON.parse(jsonStr); 20 console.log(jsonData); 21 }); 22} 23 24 25//discovered BLE device 26const discovered = (peripheral) => { 27 console.log(`BLE Device Found: ${peripheral.advertisement.localName}(${peripheral.uuid}) RSSI${peripheral.rssi}`); 28 29 if(peripheral.advertisement.localName === 'SAKETAMU'){ 30 noble.stopScanning(); 31 console.log('device found'); 32 console.log(`service discover...`); 33 34 peripheral.connect(error => { 35 if (error) { 36 console.log("connection error:", error) 37 } else { 38 console.log("device connected"); 39 } 40 41 peripheral.discoverServices([],(err, services) => { 42 if (error) { 43 console.log("discover service error", error) 44 } 45 console.log('discover service'); 46 services.forEach(service => { 47 if(service.uuid === serviceuuid){ 48 service.discoverCharacteristics([], (error, charas) => { 49 console.log('discover chara'); 50 charas.forEach(chara => { 51 if(chara.uuid === charauuid){ 52 console.log("found chara: ", chara.uuid) 53 accessChara(chara); 54 } 55 }); 56 }); 57 } 58 }); 59 }); 60 }); 61 } 62} 63 64//BLE scan start 65const scanStart = () => { 66 noble.startScanning(); 67 noble.on('discover', discovered); 68} 69 70if(noble.state === 'poweredOn'){ 71 scanStart(); 72}else{ 73 noble.on('stateChange', scanStart);

試したこと

① 最初、nobleのインストールもできていなかったのか

Error: Cannot find module 'noble' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) at Function.Module._load (internal/modules/cjs/loader.js:507:25) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:22:18) at Object.<anonymous> (/Users/nakamu/Desktop/app.js:3:15) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3)

のエラーがでいたので

mkdir ble_central cd ble_central touch app.js npm init -y npm i --save noble

でインストールし直しました。

インストールする過程で下記メッセージも出ていました(^^;;

Nakamu-no-MacBook-Air-8:ble_central nakamu$ npm i --save noble > xpc-connection@0.1.4 install /Users/nakamu/Desktop/ble_central/node_modules/xpc-connection > node-gyp rebuild gyp ERR! configure error gyp ERR! stack Error: Command failed: /Users/nakamu/anaconda/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3]; gyp ERR! stack File "<string>", line 1 gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3]; gyp ERR! stack ^ gyp ERR! stack SyntaxError: invalid syntax gyp ERR! stack gyp ERR! stack at ChildProcess.exithandler (child_process.js:294:12) gyp ERR! stack at ChildProcess.emit (events.js:182:13) gyp ERR! stack at maybeClose (internal/child_process.js:962:16) gyp ERR! stack at Socket.stream.socket.on (internal/child_process.js:381:11) gyp ERR! stack at Socket.emit (events.js:182:13) gyp ERR! stack at Pipe._handle.close (net.js:610:12) gyp ERR! System Darwin 14.5.0 gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! cwd /Users/nakamu/Desktop/ble_central/node_modules/xpc-connection gyp ERR! node -v v10.15.0 gyp ERR! node-gyp -v v3.8.0 gyp ERR! not ok npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN ble_central@1.0.0 No description npm WARN ble_central@1.0.0 No repository field. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: bluetooth-hci-socket@0.5.1 (node_modules/bluetooth-hci-socket): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for bluetooth-hci-socket@0.5.1: wanted {"os":"linux,android,win32","arch":"any"} (current: {"os":"darwin","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: xpc-connection@0.1.4 (node_modules/xpc-connection): npm WARN optional SKIPPING OPTIONAL DEPENDENCY: xpc-connection@0.1.4 install: `node-gyp rebuild` npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1 + noble@1.9.1 added 4 packages from 4 contributors and audited 107 packages in 8.094s found 3 low severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details

② app.jsを実行したら上記「発生している問題・エラーメッセージ」に記載のエラーが発生

エラーメッセージの中にある「xpc-connection」は
OS X Lionから採用されたXPCサービスだと他のサイトなどに書き込みがありました。
ということは、Yosemiteから最新バージョンにアップデートすると解決されるのかなど
アドバイスいただけると助かります。
スペックの低いMacBook Airのため、できればYosemiteのままで解決できると助かります。

補足情報(FW/ツールのバージョンなど)

Node.js バージョン v10.15.0

わかりづらくて申し訳ありませんが宜しくお願い致しますm(_ _)m

set0gut1👍を押しています

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

1

自己解決

いろいろ調べたところ、「xpc-connection」を、Node@10で実行するとエラーが出るというのを見つけました。
Node@8にバージョンを下げると実行が完了できたとのことでした。
(参考)
https://github.com/line/line-simple-beacon/issues/7

ということで、

npm -v

2.15.11
node -v
v4.7.2

とバージョンを下げて

terminal

1$ node app.js

を実行したところ下記のとおり、BLEデバイスにアドバイタズしてGATTにアクセスできました!

terminal

1BLE Device Found: SAKETAMU(000000aaaa00000a0a00aa0aa000a00a) RSSI-37 2device found 3service discover... 4device connected 5discover service 6discover chara 7found chara: 88a888a88aa888a88a888a88aaa88a88 8-----Start GATT Access----- 9listen notif

BLEデバイスに正式なファームを書き込んでないので、値が取れていないのが、
まだ気になりますが。。。

投稿2019/01/31 06:26

OKstyle-Tokyo

総合スコア16

set0gut1👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

1

gyp ERR! stack Error: Command failed: /Users/nakamu/anaconda/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3]; gyp ERR! stack File "<string>", line 1 gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3]; gyp ERR! stack ^ gyp ERR! stack SyntaxError: invalid syntax

()なしの print で syntax error になるのって、スクリプトが python2 を想定しているのに使われたのが python3 であるときに出る典型的なエラーですね。
PATH をいじって "python" が python2 を指している状況にしてから再インストールするといける気がします。

投稿2019/01/22 16:35

set0gut1

総合スコア2413

OKstyle-Tokyo👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

OKstyle-Tokyo

2019/01/24 09:57

ありがとうございます! そうですね!インストールでpython2を使いたいのに、python3が邪魔してそうですね。早速、修正してみます!結果は、また書き込みますm(_ _)m
OKstyle-Tokyo

2019/01/31 04:06

python3から、python2を指定してインストールしてみました。 上記のあるようなエラーは出なくなりましたが、下記のような”Error: Cannot find module 'xpc-connection'”は相変わらず出てしまいます。 Node.jsのバージョンを下げて試してみようと思います。 ” $ node app.js internal/modules/cjs/loader.js:583 throw err; ^ Error: Cannot find module 'xpc-connection' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) at Function.Module._load (internal/modules/cjs/loader.js:507:25) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:22:18) at Object.<anonymous> (/Users/nakamu/ble_central/node_modules/noble/lib/mac/yosemite.js:7:21) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3) ” Node.jsとnpmのバージョンは下記のとおりです。 ”$ node --version v10.15.0 $ npm --version 6.4.1”

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。