20190503のNode.jsに関する記事は2件です。

Rails5.2.3+Webpackerで`error Command "webpack" not found.`

概要

bin/webpackを実行するとerror Command "webpack" not found.で怒られる。

> bin/webpack
yarn run v1.15.2
error Command "webpack" not found.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

tl;dr

error compression-webpack-plugin@2.0.0: The engine "node" is incompatible with this module. Expected version ">= 6.9.0 <7.0.0 || >= 8.9.0". Got "8.1.0"
error Found incompatible module

上記のようなエラーがwebpacker::installコマンドで出ている場合は使用しているnodeのバージョンが対象外なので、エラーに記載されている、

6.9.0以上7.0.0未満
もしくは8.9.0以上

の中に収まるバージョンのnodeをインストールしてもう一度rails webpacker:installを実行する。

前提

環境

> ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]

> rails -v
Rails 5.2.3

> node -v
v8.1.0

> yarn -v
1.15.2

インストール手順

Gemfile
gem "webpacker", github: "rails/webpacker"
> bundle
> bin/rails webpacker:install
# 〜省略〜
Webpacker successfully installed ? ?

> ./bin/webpack
yarn run v1.15.2
error Command "webpack" not found.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
# ???

調査

はて...
installコマンドで全部必要なもの入れてくれるんじゃないの?

installコマンドのログで怪しいところを見てみると...

error

error compression-webpack-plugin@2.0.0: The engine "node" is incompatible with this module. Expected version ">= 6.9.0 <7.0.0 || >= 8.9.0". Got "8.1.0"
error Found incompatible module

Expected version ">= 6.9.0 <7.0.0 || >= 8.9.0". Got "8.1.0"

マジか。その謎の溝はなんなんだろう。8.1.0は対象外?

warning

warning "webpack-dev-server > webpack-dev-middleware@3.6.2" has unmet peer dependency "webpack@^4.0.0".
warning " > webpack-dev-server@3.3.1" has unmet peer dependency "webpack@^4.0.0".

has unmet peer dependency "webpack@^4.0.0"

必要な"webpack@^4.0.0"が無いと出ている。

対応

1. 一旦Webpackerのインストールで出来た修正とファイルを全削除。

# 他にdiffが無い状態だったので
> git add .
> git commit -m xxx
> git reset --hard head^

# gitの管理外のnode_modulesも一応全部削除
> rm -rf ./node_modules/*

2. nodeの12.1.0をインストール

12.1.0である必要はないけど、8.9.0以上だったら良いっぽいので、せっかくなので最新をインストール。

> nodenv install 12.1.0
> echo 12.1.0 > .node-version
> npm install -g yarn

3. 再度Webpackerのインストール

# Gemfileに追加して
> bundle
> rails webpacker:install

今度はエラーは出なかったが、unmet dependencyのwarningは変わらずに出ている?

> ./bin/webpack
# 成功した

通った?

なんかwarningは出てるけど後々対応していく。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

electronアプリでBLE機器を取り扱う方法まとめ(2019/5月版)

断続的にelectronでBLE機器(主にJINS MEME)を扱っていて、自分でもたまにやろうとした時いろいろやり方とか状況を忘れ去っている時があるので備忘録も兼ねて2019/5月時点の状況を書き残しておきます。大きく分けてnobleとWebbluetoothの2つの方法があります。

noble

Node.jsからBLE機器と通信を行えるnobleモジュール(の派生)を利用するのが一般的です。

メリット

  • デファクトな手法ではある
  • 故に多めに記事が見つかる

デメリット

  • レポジトリのメンテナがアクティブでないためか、Windows/MacのOS側のアップデートに対する不具合や機能追加に追随できておらず、別レポジトリ・Forkされたものを利用する必要があります。ていうかnoble/noble自体は現時点で使えません、、。

Windowsでの対応

いくつか対応方法があります

  • noble-uwp: もともとnobleでは特定のUSBドライバにしか対応していませんでしたが、Windows10のビルド15063で改善対応されたBLEスタックを使用したのがnoble-uwpです。メンテはアクティブではなさそうですが、たまに修正されているみたいです。
  • noble-winrt: こちらはビルド17134からのC++/WinRT APIを利用したバージョンです。自分が試した限りうまく動かない部分がありました。

Macでの対応

  • noble-mac: nobleのほうでMacOSのunofficialな方法を使っていたのがmac OS 10.14 (Mojave)でエラーになってしまったらしく、officialな方法で繋がるようにしたのがこちらのレポジトリです。noble-winrtと同じく作者はTimeularさん。

ビルドでの注意点

JINS MEME Mouse をビルドしてみるにまとめてあります。関連パッケージのバージョンを変えると動かなくなることが多いのでご注意ください。

Webbluetooth

Chromium自身がBLE機器と通信を行えるWebbluetooth機能を実装しているため、その機能を利用することもできます。しばらくMac/Linux/Androidのみの対応でしたが、ChromiumのV70からはWindows10でも使えるようになったため、かなりユニバーサルに使えるようになりました。

メリット

  • Nativeビルドをする必要がない!
  • noble-*のメンテ状況に依存しなくて良くなる

デメリット

  • 通常Webbluetoothで表示されるデバイス選択ダイアログは利用できず、何も設定しないと一番最初に見つかったデバイスに接続される
  • BLEと接続するのはrenderer側(chromium)だが、接続先の制御をかけるのがmain側になるため、IPCでその情報を往復させなくてはいけなくてちょっと面倒

具体的な方法

本当はここまで作りきってから記事を公開したかったのですが、nobleで作ったものに新たな不具合が出ていないのとIPCを作り込む気力がなかったので、参考情報へのリンクだけ貼って済ませたいと思います、、。
Electron Documentation - webContents
: ここのselect-bluetooth-device に electron内のWebbluetoothの挙動が記載されています。
Electron and Multiple BLE Devices #11865: おそらくここを読み解けば使えるようになるはずです

まとめ

新規に開発するならWebbluetoothでがんばってみるか、という感じです。Webbluetooth側でユーザーアクションに対する扱いがもう少しフレキシブルにできるようになると幸せになれるかもしれませんね。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む