Node-RED と Vue 3 が連携したプロジェクトに初期表示のコンポーネントと Milligram を導入するメモ
Node-RED と Vue 3 が連携したプロジェクトに初期表示のコンポーネントと Milligram を導入するメモです。
やりたいこと
https://www.1ft-seabass.jp/memo/2021/09/02/node-red-and-vue3-and-bootstrap-collaboration-basic/
こちらでは Bootstrap を導入しました。
ですが、私の場合、もっと最小限のスタイル設定で作っていきたいときに Milligram という CSS フレームワークを使うことがあるので、それも導入してみます。
Vue のプロジェクトに移動
https://www.1ft-seabass.jp/memo/2021/08/31/node-red-and-vue3-collaboration-basic/
をベースに進めます。
cd vue-node-red-view
Vue のプロジェクトを設定するため vue-node-red-view フォルダに移動します。vue-node-red-view は、さきほどの記事でつくった私のプロジェクト名なので、読み替えてください。
Milligram 本体を入れる
npm i milligram
Bootstrap の導入と同じように Milligram をインストールします。 2021/09/09 時点で milligram@1.4.1 でした。
main.js を編集
vue-node-red-view/main.js を編集します。
import { createApp } from 'vue'
import App from './App.vue'
import 'milligram'
createApp(App).mount('#app')
最初に生成された main.js に import 'milligram' だけ加えます。
NodeRED コンポーネント作成
vue-node-red-view/components/NodeRED.vue を新規作成して、以下のように記述します。
<template>
<div class="row">
<div class="column">
<div class="row">
<div class="column">
<h1></h1>
</div>
</div>
<div class="row">
<div class="column">
<ul>
<li>An item</li>
<li>A second item</li>
<li>A third item</li>
<li>A fourth item</li>
<li>And a fifth one</li>
</ul>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'NodeRED',
props: {
msg: String
},
data () {
return {
infoTitle: "Node-RED INDEX"
}
},
methods: {
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
Milligram はドキュメントもシンプルで、シンプルなHTMLをいくつか持ってきています。
App.js 修正
vue-node-red-view/App.js を NodeRED コンポーネントを呼び出すように編集します。
<template>
<div class="container">
<NodeRED/>
</div>
</template>
<script>
import NodeRED from './components/NodeRED.vue'
export default {
name: 'App',
components: {
NodeRED
}
}
</script>
<style>
/*
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
*/
</style>
今回も Bootstrap と同じく #app に当たっていた初期生成の CSS 定義は Milligram と競合しないように、一旦コメントアウトで外しています。
検証してみる
npm run serve
で確認します。

<h1></h1> でデータバインディングしていた infoTitle という値が Node-RED INDEX に置き換わっていて Vue のテンプレート構文もしっかり動いています。
これで、初期表示のコンポーネントを変更できました。
ビルドする
npm run build
いよいよ、Node-RED 側の node-red-static フォルダにビルドします。
Node-RED を起動して確認してみる
cd ..
で、Vue のプロジェクトフォルダから一つ上の階層に上がって
npm run node-red
で、Node-RED を起動して確認してみましょう。

無事、http://127.0.0.1:18801/ でも、同様の表示が確認できました!