NodeRED nodegen における require を使う Nodejs モジュール ( ライブラリ ) 込みのケース
目的
< 環境メモ >
Nodejs v12.16.1
Node-RED v1.0.4
node-red-nodegen 0.1.0 コマンドの 通常インストール済み
時間を出力するだけのオリジナルノードを生成してみる。
環境準備
( nodejs で使える moment モジュール ( ライブラリ ) を使った Node-gen )
Nodejs でつかう モジュール の require 記述
ここでは moment モジュール の require
vi ~/.node-red/settings.js
|
221行目前後の " functionGlobalContext " の項目を変更
functionGlobalContext: {
// os:require('os'),
// jfive:require("johnny-five"),
// j5board:require("johnny-five").Board({repl:false})
moment: require('moment’) // 外部モジュールの定義を追加
},
|
コア機能に使うモジュールをインストール。
ここでは、Nodejs モジュール moment を インストール。
cd ~/.node-red/
|
npm install moment
|
cd
|
これでまず 手元の node-red 上で上記モジュールを使う準備は整った。
目的となる function ノードの生成
node-red を起動
以下 パーツを配置接続
真ん中は 普通の function
function に記述。
このパーツに 名前をつける
名前: Format date
・ コード
var moment = global.get('moment');
msg.payload = moment().format('MMMM Do YYYY:mm:ss a');
return msg;
|
そして デプロイ。
動作確認
ちゃんと動作している。
function ノードの ライブラリ 出力
“ ライブラリへ保存 "
js ファイルとして保存します。
こうすると 通常 の保存先は、こちら でした。
{ ホームディレクトリ }/.node-red/lib/functions/
( GUI 上では、 function 。
CUI 上では、functions となっているのが若干 気になる。。 )
ls
Format-date.js -> 保存できている
|
ここで node-red-nodegen コマンド を実行 !
node-red-nodegen ~/.node-red/lib/functions/Format-date.js
|
Success: node-red-contrib-format-date
と表示されました。
ls
|
Format-date.js node-red-contrib-format-date/
|
jsファイルに定義を追加します
vi node-red-contrib-format-date/node.js
|
vm.createContext() の前に定義を追加します。
package.jsonファイル の 編集。依存関係を 明記します。
vi node-red-contrib-format-date/package.json
|
"keywords” 要素の次にでも。
追記しました。
シンボリックリンク の準備
cd ~/.node-red/lib/functions/node-red-contrib-format-date
sudo npm link
|
( 上記 cd の コマンド 、公式に 誤記? で 存在してなかったので 若干 迷った )
シンボリックリンク を生成します
cd ~/.node-red/
npm link node-red-contrib-format-date
|
これで 生成したノードが使用できるようになりました。
ノードジェネレータ の弱点を鑑みて 生成したノードが 使用できるか否かは、以下公式をチェックです👍
参照: Node-RED-Node-Gen 公式
素晴らしいツール作りと丁寧なドキュメントに感謝🙏