- 投稿日:2019-05-03T18:57:31+09:00
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インストール手順
Gemfilegem "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 yarn3. 再度Webpackerのインストール
# Gemfileに追加して > bundle > rails webpacker:install今度はエラーは出なかったが、unmet dependencyのwarningは変わらずに出ている?
> ./bin/webpack # 成功した通った?
なんかwarningは出てるけど後々対応していく。
- 投稿日:2019-05-03T09:03:06+09:00
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側でユーザーアクションに対する扱いがもう少しフレキシブルにできるようになると幸せになれるかもしれませんね。