天亮了 昨晚是平安夜
敲家門沒人應沒的 Rocky
找不到先行離開招集會的父母
有點著急
沿著昨天父母帶著他前往會場的路回頭探索路上可能有的蛛絲馬跡
平常很少獨自出門的 Rocky 顯得有點緊張
約莫走了七分鐘 Rocky遇到一隻從來沒見過的巨鹿
圖片來源
於是 Rocky 鼓起勇氣與他對話
請...請問巨鹿先生,你昨晚到今天有看到我的父母嗎?
巨鹿搖搖頭,但看到 Rocky無助的樣子 又說
但我可以幫你找出他們的足跡
Rocky 興奮地表示:真的嗎?那太好了,謝謝巨鹿先生
還沒等到Rocky說完感謝的話
白天突然變成了黑夜
月光映著它發光的鹿角
就在此刻
天空中出現了一隻鹿
圖片來源
維持了三秒之後地上就出現了發光的腳印
當Rocky覺得充滿希望再抬頭想要表達感謝之意的時候
巨鹿突然消失在迷霧森林之中
山谷中響起了下面這一首音樂 聲音離浣熊越來越遠
待續..
緊接著我們還需要把vue.js導入
把 vue 透過 yarn 加入專案中
$ yarn add -D @vitejs/plugin-vue
若需要typescript或是next相關相依可以一起加
$ yarn add -D @vue/compiler-sfc
$ yarn add -D typescript
$ yarn add vue@next # vue3
再來我們必須在剛剛vite幫我們自動生成的檔案中加入vue的物件讓vite認識它
vite.config.ts
import { defineConfig } from 'vite'
import RubyPlugin from 'vite-plugin-ruby'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
RubyPlugin(),
vue()
],
})
裝完之後就可以直接開始使用
$ bin/vite
Commands:
vite build # Bundle all entrypoints using Vite.
vite clobber # Clear the Vite cache, temp files, and builds
vite dev # Start the Vite development server.
vite install # Performs the initial configuration setup to get started with Vite Ruby.
vite upgrade # Updates Vite Ruby related gems and npm packages.
vite upgrade_packages # Upgrades the npm packages to the recommended versions.
vite version # Print version
在兩個專案目錄下的 command line 分頁再次打上
$ bin/vite dev
$ rails server
就可以看到專案跑起來的畫面
整合完vite跟vue之後
基於站在巨人的肩膀上寫文
我們先右轉來看看Vue架構的MVVM
Rails 與 Vue 的架構介紹
所以目前rails app的架構這樣:
├── app
│ ├── assets
│ ├── channels
│ ├── (C)ontrollers
│ ├── graphql
│ ├── helpers
│ ├── javascript => 放前端檔案最重要的地方
│ ├── jobs
│ ├── mailers
│ ├── (M)odels
│ ├── services
│ └── (V)iews
其中前端檔案
├── javascript
│ ├── channels
│ │ ├── consumer.js
│ │ └── index.js
│ ├── entrypoints
│ │ ├── application.js
│ ├── src
│ │ ├── components
│ │ └── application.css
│ │ └── main.js
│ ├── app.vue
了解專案架構後 開工開工
接下來我們建立一個RoomsController
$ Rails g controller rooms
並在view端建立vue的
app/views/rooms/index.erb
<div id="app"></div>
在app/javascript/app.vue
<template>
<p>{{ state.message }}</p>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
name: 'App',
setup() {
return {
state: {
message: "第13屆鐵人賽,動物園派對,趴踢趴踢歐奈,竟然撐過第五天了!"
}
}
}
})
</script>
<style scoped>
p {
font-size: 2em;
text-align: center;
}
</style>
最後再導入這個vue檔案
app/javascript/entrypoints/application.js
import { createApp } from 'vue'
import App from '../app.vue'
document.addEventListener('DOMContentLoaded', () => {
createApp(App).mount('#app')
})
但這邊要注意的是
@Tingting 用的vue 是vue2
這邊用的是vue 3唷
差異可以看 全端大大 @Cian
的這篇
之前如果有守好的現在應該是空倉
先來看看剛上線的台灣創作者鱷魚NFT
畫風可愛程度不輸吸血鬼
天黑請閉眼