NUXT3+tailwindcss+pinia項目搭建

創(chuàng)建

通過nuxt腳手架創(chuàng)建基礎(chǔ)項目

npx nuxi init nuxt3-template-by-leehan

通過vscode打開項目

code nuxt3-template-by-leehan

依賴包及啟動

npm install

npm run dev

啟動成功后打開:http://localhost:3000/
顯示nuxt定義的welcome頁面
項目創(chuàng)建成功

安裝tailwindcss

安裝方法

npm install --save-dev @nuxtjs/tailwindcss

使用依賴

在nuxt.config.js中添加代碼

modules: [
    '@nuxtjs/tailwindcss'
]

初始化tailwindcss.config.js文件

npx tailwindcss init

安裝tailwindcss提示插件(vscode)

Tailwind CSS IntelliSense

測試

修改app.vue文件代碼

<template>
  <div class=" w-full h-screen bg-red-500">
    HOMEPAGE
  </div>
</template>

頁面全屏顯示紅色 說明樣式文件配置成功

配置布局

目錄結(jié)構(gòu)

  1.  根目錄創(chuàng)建文件夾-layouts
    
  2.  layouts文件夾下創(chuàng)建default.vue
    
  3.  創(chuàng)建布局結(jié)構(gòu)
    
<template>
    <div class=" layout default">
        <header class=" py-6 px-4 bg-blue-200 text-white font-bold">NUXT3 TEMPLATE</header>
        <div class="content flex">
            <div class="slidebar w-1/4 h-screen bg-green-200">
                SLIDRBAR
            </div>
            <main class="content w-3/4 h-screen bg-slate-100">
                <slot></slot>
            </main>
        </div>
    </div>
</template>
  1.  修改app.vue文件
    
<template>
  <div class=" w-full h-screen bg-red-500">
    <NuxtLayout name="default">
      HOMEPAGE
    </NuxtLayout> 
  </div>
</template>

重啟項目

重啟項目檢查布局是否應(yīng)用成功

路由

目錄結(jié)構(gòu)

  1. 根目錄創(chuàng)建文件夾-pages
  2. 修改app.vue
<template>
  <div class=" w-full h-screen bg-red-500">
    <NuxtLayout name="default">
      <RouterView />
    </NuxtLayout> 
  </div>
</template>

  1. 創(chuàng)建index.vue - 首頁
<template>
    <div>
        HOMOPAGE
    </div>
</template>
  1. 創(chuàng)建user文件夾和index.vue - 用戶中心
<template>
    <div>
        USERINFO
    </div>
</template>
  1. 創(chuàng)建article文件夾广凸、
    index.vue - 文章列表
```
<template>
    <div>
        ARTICLE LIST

        <ul>
            <li>
                <NuxtLink to="article/123">文章123</NuxtLink>
            </li>
            <li>
                <NuxtLink to="article/111">文章111</NuxtLink>
            </li>
        </ul>
    </div>
</template>
```
[id].vue - 文章詳情(動態(tài)路由)
```
    <template>
        <div>
            ARTICLE DETAIL - {{ $route.params.id }}
        </div>
    </template>
```

使用pinia

安裝

==注:在安裝pinia的時候報了沖突 所以我選擇加了--legacy-peer-deps 不報錯的情況下可以不加==

npm install pinia @pinia/nuxt @nuxtjs/composition-api --legacy-peer-deps

環(huán)境配置

  1. 創(chuàng)建env文件夾
    
  2. env文件夾中創(chuàng)建環(huán)境文件
    

.env.dev 開發(fā)環(huán)境變量

VITE_API_ENV="dev"
VITE_BASE_URL='http://10.86.11.99:8099/'

.env.test

VITE_API_ENV="test"
VITE_BASE_URL='http://www.test******.com/'

.env.prod

VITE_API_ENV="dev"
VITE_BASE_URL='http://www.prod*****.com/'
  1.  修改package.json文件
    
"scripts": {
    "build:test": "nuxt build --mode test",
    "build:prod": "nuxt build --mode prod",
    "dev": "nuxt dev --mode dev",
    "generate": "nuxt generate",
    "preview": "nuxt preview",
    "postinstall": "nuxt prepare"
  },

4、 修改nuxt.config.ts文件

// https://nuxt.com/docs/api/configuration/nuxt-config
import { loadEnv } from 'vite';
const envScript = process.env.npm_lifecycle_script?.split(" ") as Array<any>

interface VITE_ENV_CONFIG{
    VITE_API_ENV:string,
    VITE_BASE_URL:string

}
const envName = envScript[envScript?.length - 1] // 通過啟動命令區(qū)分環(huán)境
const evnData = loadEnv(envName,"env") as unknown as VITE_ENV_CONFIG

export default defineNuxtConfig({
    modules: [
        '@nuxtjs/tailwindcss',
        '@pinia/nuxt'
    ],
    css: [
        'animate.css/animate.css',
    ],
    runtimeConfig:{
        public:evnData
    }
})

封裝請求

utils文件夾下創(chuàng)建http.ts文件

@/utils/http.ts

import { hash } from 'ohash'
 
// 后端返回的數(shù)據(jù)類型
export interface ResOptions<T> {
  data?: T
  code?: number
  msg?: string
}
 
/**
 * api請求封裝
 * @param { String } url 請求地址
 * @param { Object } options useFtech第二個參數(shù)
 * @param { Object } headers 自定義header頭, 單獨設(shè)置headers區(qū)分請求參數(shù),也好設(shè)置類型
 */
const fetch = (url: string, options?: any, headers?: any): Promise<any> => {
 
  const { public: { VITE_BASE_URL } } = useRuntimeConfig() // 3.0正式版環(huán)境變量要從useRuntimeConfig里的public拿
 
  const reqUrl = VITE_BASE_URL + url // 你的接口地址
  // console.log(NUXT_PUBLIC_API_MOCK)
  // 不設(shè)置key,始終拿到的都是第一個請求的值制轰,參數(shù)一樣則不會進行第二次請求
  const key = hash(JSON.stringify(options) + url)
 
  // 可以設(shè)置默認(rèn)headers例如
  const customHeaders = { token: useCookie('token').value, ...headers }
 
  return new Promise((resolve, reject) => {
    useFetch(reqUrl, { ...options, key, headers: customHeaders }).then(({ data, error }) => {
      if (error.value) {
        reject(error.value)
        return
      }
      const value = data.value
      // console.log('useFetchResData: ', value)
      if (!value) {
        // 這里處理錯你自定義的錯誤演顾,例如code !== 1
        throw createError({
          statusCode: 500,
          statusMessage: reqUrl,
          message: '自己后端接口的報錯信息',
        })
      } else {
        resolve(value)
      }
    }).catch((err: any) => {
      console.log(err)
      reject(err)
    })
  })
}
 
export default new class Http {
 
  get(url: string, params?: any, headers?: any): Promise<any> {
    return fetch(url, { method: 'get', params }, headers)
  }
 
  post (url: string, params?: any, headers?: any): Promise<any> {
    return fetch(url, { method: 'post', params }, headers)
  }
 
  put (url: string, params?: any, headers?: any): Promise<any> {
    return fetch(url, { method: 'put', params }, headers)
  }
 
  delete (url: string, params?: any, headers?: any): Promise<any> {
    return fetch(url, { method: 'delete', params }, headers)
  }
}

composables文件夾中創(chuàng)建api.ts文件

@/composables/api.ts

import Http from "@/utils/http";
export const nav = (params?:any)=>{
    return Http.post('后端api路徑',params)
}

在頁面使用

服務(wù)端

const navData = await nav()
const {data} = navData

客戶端

const navValue = ref([]) as any
const getNav = async ()=>{
    const res = await nav()
    navValue.value = res.data
}
onMounted(()=>{
    getNav()
})

PM2部署

全局安裝

    npm i -g pm2

初始化ecosystem.config.js文件

pm2 init

打包

測試環(huán)境

npm run build:test

生產(chǎn)環(huán)境

npm run build:prod

文件遷移

復(fù)制.output和ecosystem.config.js到服務(wù)器主頁

pm2啟動項目

測試環(huán)境

pm2 start ecosystem.config.js --env test

生產(chǎn)環(huán)境

pm2 start ecosystem.config.js --env prod
依賴文檔
特別鳴謝
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市露氮,隨后出現(xiàn)的幾起案子踪古,更是在濱河造成了極大的恐慌含长,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灾炭,死亡現(xiàn)場離奇詭異茎芋,居然都是意外死亡颅眶,警方通過查閱死者的電腦和手機蜈出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涛酗,“玉大人铡原,你說我怎么就攤上這事∩烫荆” “怎么了燕刻?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剖笙。 經(jīng)常有香客問我卵洗,道長,這世上最難降的妖魔是什么弥咪? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任过蹂,我火速辦了婚禮,結(jié)果婚禮上聚至,老公的妹妹穿的比我還像新娘酷勺。我一直安慰自己,他們只是感情好扳躬,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布脆诉。 她就那樣靜靜地躺著甚亭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪击胜。 梳的紋絲不亂的頭發(fā)上亏狰,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音偶摔,去河邊找鬼骚揍。 笑死,一個胖子當(dāng)著我的面吹牛啰挪,可吹牛的內(nèi)容都是我干的信不。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼亡呵,長吁一口氣:“原來是場噩夢啊……” “哼抽活!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锰什,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤下硕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汁胆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梭姓,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年嫩码,在試婚紗的時候發(fā)現(xiàn)自己被綠了誉尖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡铸题,死狀恐怖铡恕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丢间,我是刑警寧澤探熔,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站烘挫,受9級特大地震影響清酥,放射性物質(zhì)發(fā)生泄漏穷劈。R本人自食惡果不足惜噪奄,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一玷过、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喜滨,春花似錦捉捅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寄月。三九已至,卻和暖如春无牵,著一層夾襖步出監(jiān)牢的瞬間漾肮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工茎毁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留克懊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓七蜘,卻偏偏與公主長得像谭溉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子橡卤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容