---
# 998 Quasar+插件製作步驟
---
# 998 Quasar+插件製作步驟
# 基本初始化
## 啟用yarn:(選配,只是不用npm改用yarn,你可以用npm完成一樣的事,只是quasar推薦yarn)
#### 開cmd(用系統管理員權限開)
corepack enable
#### 跟npm 指令小差異:
初始化:
npm init = yarn init
從package.json 安裝nodemodule
npm i = yarn install
安裝xxx
npm i xxx = yarn add xxx
npm un xxx = yarn remove xxx
執行 dev
npm run dev = yarn dev
---
# 安裝quasar
[可以看這裡做,更詳細且包含npm](https://quasar.dev/start/quasar-cli)
yarn global add @quasar/cli
yarn create quasar
![](https://i.imgur.com/joJJm09.png)
## Quasra檔案設定
增加 packgee.json的
```javascript
"scripts": {
"build": "quasar build",
"dev": "quasar dev"
},
```
---
### 每個vue檔的script整個移除,改 script setup!!
(原本是option api)
不要理
---
### 如果eslint因報錯少空格
![](https://i.imgur.com/yRxn8M2.png)
#### 在rule 加上
![](https://i.imgur.com/PMqqBLe.png)
---
## @ 指向 ./src
[詳細設定](https://quasar.dev/quasar-cli-vite/handling-vite#adding-folder-aliases)
(可以直接用src替代@使用)
quasar.config.js:
```javascript
const path = require('path')
build: {
alias: {
'@': path.join(__dirname, './src')
},
}
```
---
## env (變更env需要重開dev)
1. npm i dotenv
2. 去.env檔加變數(跟之前一樣)
3. quasar.config.js 調整
```javascript=
require('dotenv/config')
build: {
env: {
變數名: process.env.變數名
}
}
```
3. vue頁面就可直接用: process.env.變數名
---
# build gitpage準備
(只有3步驟)
## 更改build輸出的路徑,才不會報錯'./'
在quasar.config.js build裡新增
```javascript
build: {
// 新增這個
extendViteConf (viteConf) {
viteConf.base = ''
},
}
```
---
## Quasar build後的資料夾會是dist/spa (多spa) 所以去自動部屬檔deploy.yml
對應到目錄
![](https://i.imgur.com/Btbz7zm.png)
## deploy.yml 加上自己要的env變數:
![](https://i.imgur.com/6PNDf8Z.png)
## 記得github secret加上.env的變數
---
# i18n (Quasar版)
#### Quasar的教學不是給composition+setup,以這邊為主
## 初始化 [composition教學源自這](https://vue-i18n.intlify.dev/guide/advanced/composition.html#message-translation)
1.增加這段供composition 可用
![](https://i.imgur.com/yT7PRsL.png)
2.在要用的vue檔
```javascript
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
```
html:
```htmlembedded
<p>{{ t('message') }}</p>
```
### 範例:要傳多語言內容給子元件:(ex: 選單v-for內容是多語言)
##### 母:
```javascript=
import ListComponent from 'components/listComponent.vue'
const linksList = [
{ test: 'message1' },
{ test: 'message2'},
```
```htmlembedded=
<q-list>
<ListComponent v-for="link in linksList" :key="自己設id阿" :link="link" />
<!--:link(子元件會有變數叫link)="link(內容是v-for定義的link的內容)" -->
</q-list>
```
##### 子:
```javascript=
import { defineProps, ref } from 'vue'
import { useI18n } from 'vue-i18n'
// 承接進來的link
const props = defineProps({
link: Object
})
// 同前面i18n教學
const { t } = useI18n()
const text = ref('')
```
```htmlembedded
<q-item>{{ t(link.test) }}</q-item>
```
---
## [增加語言清單](https://github.com/quasarframework/quasar/tree/dev/ui/lang)
依樣畫葫蘆
![](https://i.imgur.com/uVKqFPd.png)
在要放切換選單的元件
<q-select v-model="locale" :options="localeOptions" label="Change Language" emit-value map-options
style="min-width: 150px" />
```javascript
// 這為了可調整語言+預設語言
import { useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n'
const localeOptions = [
{ value: 'en-US', label: 'English' },
{ value: 'zh-TW', label: '繁體中文' }
]
const { locale } = useI18n({ useScope: 'global' })
// 這段把預設語言設為偵測到電腦的語言
locale.value = useQuasar().lang.getLocale()
```
## 用google sheet維護i18n表單
方便: 用一個table而不是3個檔案來維護翻譯檔
細節: 在上傳到github時會自動抓Sheet更新,且密鑰檔存在env裡不用另外帶,且只貼一次env變數就好
1. [綁google sheet建個JS檔實作,請照教學用require](https://ithelp.ithome.com.tw/articles/10262354)
2. [來這裡把整個密鑰檔內容貼上=>encode=>複製](https://www.base64encode.org/)
3. 在.env加上變數名及剛才的內容
![](https://i.imgur.com/DdQiVn3.png)
4. 1.練習的js檔,調整一些(不能import)
![](https://i.imgur.com/LEP8tiu.png)
```javascript
require('dotenv').config()
const key = Buffer.from(process.env.GOOGLE_SHEET, 'base64').toString('utf8')
credentials: JSON.parse(key),
```
5. 讓build時會自動跑程式:
package.json 加上 "prebuild":"node ./src/i18n/sheet2JSON.js" (對應你跟目錄,執行檔的位置)
---
## router 在store(pinia)裡面使用 需要調整用法:
this.router.push('/')
才能切換,老師原本的router.push('/') 不行用
---
## 文章編輯器
```Html
</template>
<QuillEditor theme="snow" />
</template>
<script setup>
import { defineComponent } from 'vue'
import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'
defineComponent({
name: 'IndexPage',
components: QuillEditor
}
)
</script>
```
[其它主題/功能自己看](https://vueup.github.io/vue-quill/guide/themes.html)