- 投稿日:2021-12-30T20:39:00+09:00
npm run buildの際にBuilding for production...Errorが出る
久々の投稿です、 現在は、派遣でエンジニアしてます。 来年の2月からフリーランスになります!! 次の現場では、vueを使うので勉強していて 問題にぶつかりました。 npm run build時に下記のエラーが出ました。 kushiyama_makoto@MakotonoMacBook-Air udemy-vuejs % npm run build > udemy-vuejs@0.1.0 build > vue-cli-service build ⠹ Building for production...Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:130:10) at module.exports (/Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/util/createHash.js:135:53) at NormalModule._initBuildHash (/Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/NormalModule.js:417:16) at handleParseError (/Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/NormalModule.js:471:10) at /Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/NormalModule.js:503:5 at /Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/NormalModule.js:358:12 at /Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:373:3 at iterateNormalLoaders (/Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:214:10) at iterateNormalLoaders (/Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:221:10) at /Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:236:3 at runSyncOrAsync (/Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:130:11) at iterateNormalLoaders (/Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:232:2) at Array.<anonymous> (/Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:205:4) at Storage.finished (/Users/kushiyama_makoto/udemy-vuejs/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16) at /Users/kushiyama_makoto/udemy-vuejs/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9 /Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:114 throw e; ^ Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:130:10) at module.exports (/Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/util/createHash.js:135:53) at NormalModule._initBuildHash (/Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/NormalModule.js:417:16) at handleParseError (/Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/NormalModule.js:471:10) at /Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/NormalModule.js:503:5 at /Users/kushiyama_makoto/udemy-vuejs/node_modules/webpack/lib/NormalModule.js:358:12 at /Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:373:3 at iterateNormalLoaders (/Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:214:10) at /Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:186:6 at context.callback (/Users/kushiyama_makoto/udemy-vuejs/node_modules/loader-runner/lib/LoaderRunner.js:111:13) at /Users/kushiyama_makoto/udemy-vuejs/node_modules/cache-loader/dist/index.js:240:7 at /Users/kushiyama_makoto/udemy-vuejs/node_modules/neo-async/async.js:2830:7 at done (/Users/kushiyama_makoto/udemy-vuejs/node_modules/neo-async/async.js:2865:11) at /Users/kushiyama_makoto/udemy-vuejs/node_modules/neo-async/async.js:2818:7 at Array.<anonymous> (/Users/kushiyama_makoto/udemy-vuejs/node_modules/cache-loader/dist/index.js:229:9) { opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED' } Node.js v17.3.0 正直わからん状態でしたが、ググった結果下記のコマンドで解決しました。 export NODE_OPTIONS=--openssl-legacy-provider nodeの設定を追加したみたいですね。 一応、下記のURLを参考にしました。 https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported 確認してみてください!!!
- 投稿日:2021-12-30T13:44:55+09:00
SwitchBot温湿度計からBluetoothで気温と湿度を取得する
SwitchBot温湿度計 から Bluetooth 通信で現在値を取得するメモ。 動作確認環境 macOS 12.1 node v17.3.0 npm v8.3.0 SwitchBot温湿度計 node-switchbot で値を取る OpenWonderLabsが公開しているnode-switchbotを使うと、非常に楽。 必要なモジュールをインストールして、 npm install @abandonware/noble npm install node-switchbot Quick Start のコードをapp.js等に保存して実行するだけで、値が取得できる。 // Load the node-switchbot and get a `Switchbot` constructor object const Switchbot = require('node-switchbot'); // Create an `Switchbot` object const switchbot = new Switchbot(); (async () => { // Start to monitor advertisement packets await switchbot.startScan(); // Set an event hander switchbot.onadvertisement = (ad) => { console.log(JSON.stringify(ad, null, ' ')); }; // Wait 10 seconds await switchbot.wait(10000); // 10秒だと受信しないことがあるので、受信確認用に60秒くらいにしておくと良い // Stop to monitor switchbot.stopScan(); process.exit(); })(); こんな感じのデータが受信できる。 { "id": "11d6e84dd3e18b4e3aab47da4aecb60a", "address": "XX:XX:XX:XX:XX:XX", "rssi": -54, "serviceData": { "model": "T", "modelName": "WoSensorTH", "temperature": { "c": 21.7, "f": 71.1 }, "fahrenheit": false, "humidity": 53, "battery": 100 } } serviceData.temperature.c が気温(℃) serviceData.humidity が湿度(%) serviceData.address が対象端末のMACアドレスなので、これで個体を識別する ・データタイプ(modelName)には、 Bot, Meter, Curtain があるようで、 温湿度計はMeterに属する。 https://github.com/OpenWonderLabs/node-switchbot#advertisement-data ・データの受信はプログラム実行直後にくるとは限らず、 実行から30秒くらいかかることもある。 ・アパートの一部屋で実行すると、ご近所さんのSwitchBotからも ガンガン データを受信する Bluetooth API で値を取る SwitchBot温湿度計は、Bluetooth通信規格に BLE(Bluetooth Low Energy)を採用しているので、とってもエコ。 通信データの内容が公開されているので、任意のBLE通信APIからアクセスしてデータを活用できる。 手元では、abandonware/nobleを使ってデータを取得することもできた。 abandonware/noble nodeのBLE通信モジュールとしてnobleが有名みたいだが、本家は更新が止まっているので、 abandonwareさん?がそういった有益なOSSを引き継いで開発保守をしてくれているらしい。 BLEでは、[親機(central module)] 1 対 [子機(peripheral)] 多 で通信が行われ、 nobleは親機の実装用モジュールとなる。 雑にデータを取りに行くだけならこんな感じ。 const UUIDs = ['cba20d00224d11e69fb80002a5d5c51b']; const noble = require('@abandonware/noble'); noble.on('stateChange', state => { // nobleの初期stateはUnknown. poweredOn になってからスキャンを開始しなければいけない if (state == 'poweredOn'){ // UUIDsで指定された対象だけが、スキャンの対象となる。 // ここで設定している値は、SwitchBot機器用に公開されているUUID // 第2引数は duplicate. 同端末からは1回のみデータを受け取るならば false にする noble.startScanning(UUIDs, true); } }); noble.on('discover', peripheral => { console.log('' + peripheral); }); こんな感じにデータが取れる { "id": "11d6e84dd3e18b4e3aab47da4aecb60a", "address": "", "addressType": "unknown", "connectable": true, "advertisement": { "manufacturerData": { "type": "Buffer", "data": [ 89, 0, 220, 48, 188, 73, 157, 176 ] }, "serviceData": [ { "uuid": "0d00", "data": { "type": "Buffer", "data": [ 84, 16, 100, 8, 148, 54 ] } } ], "serviceUuids": [ "cba20d00224d11e69fb80002a5d5c51b" ] }, "rssi": -55, "mtu": null, "state": "disconnected" } Meter BLE open API abandonware/nobleでデータ取得ができるようになったら、 Meter BLE open APIで公開されているデータ仕様を参考にして必要な値を取得する。 ※ここにUUIDについての記載もある UUID: cba20d00-224d-11e6-9fb8-0002a5d5c51b and fee7 温湿度計用には(New) Broadcast Messageのあたりが直接参考になるので、コードにおこすとこんな感じになる。 noble.on('discover', peripheral => { const sd = peripheral.advertisement.serviceData[0].data; const md = peripheral.advertisement.manufacturerData; const temperatureAboveZero = (sd[4] & 0b10000000) != 0; const data = { 'type': sd[0] & 0b01111111, 'battery': sd[2] & 0b01111111, 'temperature': ((sd[3] & 0b00001111) / 10 + (sd[4] & 0b01111111)) * (temperatureAboveZero?1:-1), 'humidity': sd[5] & 0b01111111, 'rssi': peripheral.rssi, 'address': `${md[2].toString(16)}:${md[3].toString(16)}:${md[4].toString(16)}:${md[5].toString(16)}:${md[6].toString(16)}:${md[7].toString(16)}` }; console.log(JSON.stringify(data)); });
- 投稿日:2021-12-30T01:34:24+09:00
30秒でREST APIのモックサーバを準備する
背景 バックエンドの開発時に別のAPIサーバへ問い合わせするパターンがあるじゃないですか。 個人開発なら「httpbin.org」とか使えばいいのですが、業務だと外部サーバーに投げるわけにいきません。 というわけで30秒でサクッと作れるREST APIサーバである「json-server」の紹介です。 1. インストール ※レギュレーションとしてパッケージのインストール時間は除外します! $ npm i json-server 2. データを準備(15秒) パスと応答データを記載したjsonファイルを準備する。 dummy.json { "top_gear": [ { "id": 0, "name": "Jeremy Charles Robert Clarkson", "keyword ": "英国紳士(笑)" }, { "id": 1, "name": "Richard Mark Hammond", "keyword ": "事故" }, { "id": 2, "name": "James Daniel May", "keyword ": "老犬" } ] } 3. サーバ起動(5秒) $ json-server --watch dummy.json 以下のログが出れば起動完了です。 \{^_^}/ hi! Loading dummy.json Done Resources http://localhost:3000/top_gear Home http://localhost:3000 Type s + enter at any time to create a snapshot of the database Watching... http://localhost:3000/top_gearにアクセスするとJsonが返ってきます。
- 投稿日:2021-12-30T01:24:02+09:00
Homebrewを使用してNode.jsをインストールする
Goal M1チップ搭載のMacBook AirにHomebrewを使用してNode.jsをインストールする手順を示します。 特定バージョンのNode.jsへ切り替えて使用できるようにするため、nodenvをインストールし、Node.jsをnodenvで管理します。 References "nodenv". Will McKenzie. Retrieved December 29, 2021. Pre-Requisites この文書の手順は、次の環境で実施し、動作を確認しました。 MacBook Air (M1, 2020) macOS Monterey 12.0.1 zsh 5.8 Xcode 13.2.1 Command Line Tools for Xcode 13.2.0.0.1 (Dec 3, 2021) Homebrew 3.3.9 How To nodenvをインストールする ターミナルを開きます。 nodenvをインストールするため、次のコマンドを実行します。 % brew install nodenv nodenvにパスを通すため、次のコマンドを実行します。 % echo 'eval "$(nodenv init -)"' >> ~/.zshrc ターミナルを再起動します。 nodenvへパスが通り実行できることを確認するため、次のコマンドを実行します。 % nodenv --version nodenv 1.4.0 特定バージョンのNode.jsをインストールする ターミナルを開きます。 特定バージョンのNode.jsをインストールするため、次のコマンドを実行します。 % nodenv install 16.13.1 インストールしたバージョンを現在のNode.jsへ設定するため、次のコマンドを実行します。 % nodenv global 16.13.1 Node.jsの現在のバージョンを確認するため、次のコマンドを実行します。 % nodenv versions * 16.13.1 (set by /Users/juno/.nodenv/version) % node --version v16.13.1