• nuxt3:我们开始吧!


    一、背景介绍

    2022 年 11 月 16 日,全球最大的 Nuxt 会议 Nuxt Nation 2022 在线举行,并正式发布了 Nuxt.js 3.0 的第一个稳定版本。Nuxt 3 是基于 ViteVue3 和 Nitro 的 Nuxt 框架的现代重写,具有一流的 Typescript 支持,是两年多研究、社区反馈、创新和实验的结果。为每个人提供了一个愉快的 Vue 全栈开发体验。

    因为nuxt优越的服务端渲染能力,所以对于nuxt3项目关注已久!我们开始吧!

    二、官方网址

    Nuxt - The Intuitive Vue Framework

    Announcing 3.0 · Nuxt

    Nuxt - Installation

    https://github.com/nuxt/create-nuxt-app/blob/master/README.md

    三、新特性介绍

    1、更轻量:以现代浏览器为目标的服务器部署和客户端产物最多可缩小 75 倍
    2、更快:基于 nitro 提供动态代码分割能力,以优化冷启动性能
    3、Hybrid:增量静态生成和其他的高级功能现在都成为可能
    4、Suspense:在任意组件和导航前后都可以获取数据
    5、Composition API:使用 Composition API 和 Nuxt 3 的 composables 实现真正的代码复用
    6、Nuxt CLI:没有任何依赖,帮你轻松搭建项目和集成模块
    7、Nuxt Devtools:通过直接在浏览器中查看信息和快速修复实现更快地工作
    8、Nuxt Kit:具有 Typescript 和跨版本兼容性的全新模块开发
    9、Webpack 5:更快的构建时间和更小的包大小,无需配置
    10、Vite:使用 Vite 作为打包工具,体验闪电般快速的 HMR
    11、Vue 3:Vue 3 是你下一个 Web 应用程序的坚实基础
    12、TypeScript:使用原生 TypeScript 和 ESM 构建,无需额外步骤

    Nuxt 3.0 稳定版正式发布,基于 Vue 3 的 Web 框架

    四、重要概念

    SPA应用:也就是单页应用,这些多是在客户端的应用,不能进行SEO优化(搜索引擎优化)。

    SSR应用:在服务端进行渲染,渲染完成后返回给客户端,每个页面有独立的URL,对SEO友好。

    约定式路由:不需要配置路由,在根目录pages目录下创建业务页面,即可访问。

    约定式配置:如layouts布局、middleware、plugins

    五、启动基础项目

    https://github.com/nuxt/create-nuxt-app/blob/master/README.md

    5.1、创建项目:

    创建nuxt3项目:

    pnpm dlx nuxi init nuxt-app

     npx nuxi init nuxt3-app

    5.2、安装依赖

    pnpm install --shamefully-hoist

    5.3、启动项目

    启动成功

    六、项目配置、基础使用

    6.1、访问pages/index.vue

    根目录app.vue,替换为:

    1. <template>
    2. <NuxtPage/>
    3. <!-- <div>
    4. <NuxtWelcome />
    5. </div> -->
    6. </template>

    pages/index.vue

    1. <template>
    2. <div>
    3. <h1>snow</h1>
    4. </div>
    5. </template>
    6. <script setup lang="ts">
    7. </script>
    8. <style scoped>
    9. </style>

    pages/about.vue  

    1. <template>
    2. <div>
    3. <h1>about</h1>
    4. </div>
    5. </template>
    6. <script setup lang="ts">
    7. </script>
    8. <style scoped>
    9. </style>

    这样就可以访问页面了:

    6.2、动态路由

    6.2.1、目录结构

    6.2.2、访问:/user

    如果没有pages/user/index页面,只有[id].vue,访问的时候式404页面

    6.2.3、访问:/user/1,动态路由,获取动态路由参数

    {{$route.params.id}}

    6.2.4、访问:/user/1?name=snow,动态路由,获取路由普通参数:

    {{$route.query.name}}

     6.2.5、通过useRoute()获取路由信息

    const route = useRoute()

    1. <template>
    2. <div>
    3. <h1>user-id:{{$route.params.id}}</h1>
    4. <h1>user-name:{{$route.query.name}}</h1>
    5. </div>
    6. </template>
    7. <script setup lang="ts">
    8. const route = useRoute()
    9. console.log(route.params, route.query)
    10. </script>
    11. <style scoped>
    12. </style>

    6.3、路由跳转

    经过测试一下几种方式均成功跳转。页面内容均正常展示。

    6.3.1、

    user-id

    6.3.2、 

    user-id-2

    6.3.3、

    user-id-3

    6.3.4、编程式路由

    1. <script setup lang="ts">
    2. function toUser() {
    3. navigateTo({
    4. path: '/user/4',
    5. query: {
    6. name: 'snow'
    7. }
    8. })
    9. }
    10. </script>

    6.4、加载静态资源

    1. <div>
    2. <img src="~/assets/nginx.jpg" alt="nginx">
    3. <img src="~/public/nginx.jpg" alt="nginx">
    4. </div>

     nuxt项目tsconfig.json有配置,public目录下的文件可以省略/public目录,我这里测试不可以,后续会再研究

    已测试成功,可以省略 “~/public” 目录

    6.5、设置页面title,不会在页面展示,只会在页面title部分展示

    6.5.1、

    snow-title

    1. <template>
    2. <Title>snow-title</Title>
    3. </template>
    4. <script setup lang="ts">
    5. </script>
    6. <style scoped>
    7. </style>

    如图:

     ctrl + u:

     6.5.2、使用useHead()方法

    1. useHead({
    2. title: 'snow-title-2'
    3. })

    设置成功,useHead优先级小于标签。</p> <p>6.5.3、同理使用useHead设置页面的TDK信息</p> <pre data-index="8" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>script setup lang<span class="hljs-operator">=</span><span class="hljs-string">"ts"</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">useHead({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> title: <span class="hljs-string">'snow-title-2'</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> meta: [</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> { name: <span class="hljs-string">'description'</span>, <span class="hljs-keyword">content</span>: <span class="hljs-string">'snow-desc'</span>},</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> { name: <span class="hljs-string">'keywords'</span>, <span class="hljs-keyword">content</span>: <span class="hljs-string">'snow-kw'</span>}</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="227" src="https://1000bd.com/contentImg/2024/04/17/ea9b4ea083ed49fb.png" ></p> <p></p> <h4 id="6.6%E3%80%81layouts"><a name="t11"></a><strong>6.6、layouts</strong></h4> <p>6.6.1、理解:布局、页面布局、公共布局、基础布局</p> <p>6.6.2、根目录创建layouts目录,/layouts/default.vue</p> <pre data-index="9" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> snow-default-layout</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>slot <span class="hljs-operator">/</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>script setup lang<span class="hljs-operator">=</span><span class="hljs-string">"ts"</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>style scoped<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>style<span class="hljs-operator">></span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.6.3、app.vue</p> <pre data-index="10" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>NuxtLayout<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>NuxtPage<span class="hljs-operator">/</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span><span class="hljs-operator">/</span>NuxtLayout<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>!-- <span class="hljs-operator"><</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>NuxtWelcome <span class="hljs-operator">/</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span> --<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>template<span class="hljs-operator">></span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="533" src="https://1000bd.com/contentImg/2024/04/17/0c57e34906a8ad2e.png" ></p> <p> 6.6.4、</p> <p><img alt="" height="265" src="https://1000bd.com/contentImg/2024/04/17/d2eac5e13350d3e3.png" ></p> <p> 6.6.5、某页面不想使用layout:</p> <pre data-index="11" class="set-code-show" name="code"><code class="hljs language-php"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-title function_ invoke__">definePageMeta</span>({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">layout</span>: <span class="hljs-literal">false</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.6.6、某页面使用指定layout</p> <p><img alt="" height="151" src="https://1000bd.com/contentImg/2024/04/17/f4af7bf1e963bda5.png" ></p> <pre data-index="12" class="set-code-show" name="code"><code class="hljs language-php"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-title function_ invoke__">definePageMeta</span>({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">layout</span>: <span class="hljs-string">'layout-snow'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>  6.6.7、动态设置layout</p> <pre data-index="13" class="set-code-show" name="code"><code class="hljs language-csharp"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">const</span> router = useRoute()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-function">function <span class="hljs-title">enableLayout</span> ()</span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> router.meta.layout = <span class="hljs-string">"layout-snow"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.6.8、全局设置,指定layout</p> <pre data-index="14" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>NuxtLayout :name<span class="hljs-operator">=</span><span class="hljs-string">"layoutSnow"</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>NuxtPage<span class="hljs-operator">/</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span><span class="hljs-operator">/</span>NuxtLayout<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>!-- <span class="hljs-operator"><</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>NuxtWelcome <span class="hljs-operator">/</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span> --<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>script setup lang<span class="hljs-operator">=</span><span class="hljs-string">"ts"</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">const layoutSnow <span class="hljs-operator">=</span> <span class="hljs-keyword">ref</span>(<span class="hljs-string">"layout-snow"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <h4 id="6.7%E3%80%81plugins"><a name="t12"></a><strong>6.7、plugins</strong></h4> <p>/plugins/index.ts</p> <pre data-index="15" class="set-code-show" name="code"><code class="hljs language-typescript"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-title function_">defineNuxtPlugin</span>(<span class="hljs-function">()=></span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">provide</span>: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">hello</span>: <span class="hljs-function">(<span class="hljs-params">msg: <span class="hljs-built_in">string</span></span>) =></span> <span class="hljs-string">`hello <span class="hljs-subst">${msg}</span>`</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>/pages/plugin.vue</p> <pre data-index="16" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> snow-plugin</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>script setup lang<span class="hljs-operator">=</span><span class="hljs-string">"ts"</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">const { $hello } <span class="hljs-operator">=</span> useNuxtApp()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">console.log(<span class="hljs-string">'9'</span>, $hello(<span class="hljs-string">'world'</span>))</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>style scoped<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>style<span class="hljs-operator">></span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="505" src="https://1000bd.com/contentImg/2024/04/17/5a9044862b7abe77.png" ></p> <h4 id="6.8%E3%80%81middleware"><a name="t13"></a><strong>6.8、middleware</strong></h4> <p>/middleware/auth.ts</p> <pre data-index="17" class="set-code-show" name="code"><code class="hljs language-typescript"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-title function_">defineNuxtRouteMiddleware</span>(<span class="hljs-function">(<span class="hljs-params">to, <span class="hljs-keyword">from</span></span>)=></span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">"auth"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>/middleware/snow.ts</p> <pre data-index="18" class="set-code-show" name="code"><code class="hljs language-typescript"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-title function_">defineNuxtRouteMiddleware</span>(<span class="hljs-function">(<span class="hljs-params">to, <span class="hljs-keyword">from</span></span>)=></span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">"snow"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>/pages/plugin.vue</p> <pre data-index="19" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> snow-plugin</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>script setup lang<span class="hljs-operator">=</span><span class="hljs-string">"ts"</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">definePageMeta({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> middleware: [<span class="hljs-string">"auth"</span>, <span class="hljs-string">"snow"</span>]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>style scoped<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>style<span class="hljs-operator">></span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p> 如图:</p> <p><img alt="" height="544" src="https://1000bd.com/contentImg/2024/04/17/fcb1ce36542afabf.png" ></p> <h4 id="6.9%E3%80%81server"><a name="t14"></a><strong>6.9、server</strong></h4> <p>6.9.1、目录</p> <p><img alt="" height="283" src="https://1000bd.com/contentImg/2024/04/17/5ac0bf36ab049bca.png" ></p> <p>6.9.2、server/api/hello.ts</p> <pre data-index="20" class="set-code-show" name="code"><code class="hljs language-coffeescript"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> defineEventHandler(<span class="hljs-function"><span class="hljs-params">(event)</span> =></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> api: <span class="hljs-string">"works"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p> <img alt="" height="277" src="https://1000bd.com/contentImg/2024/04/17/63fe6416465cbddb.png" ></p> <p> 6.9.3、server/api/test.get.ts</p> <pre data-index="21" class="set-code-show" name="code"><code class="hljs language-typescript"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-title function_">defineEventHandler</span>(<span class="hljs-function">(<span class="hljs-params">event</span>) =></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> <span class="hljs-string">`test get ts`</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="197" src="https://1000bd.com/contentImg/2024/04/17/04504b5ee578d155.png" ></p> <p>6.9.4、server/api/test.post.ts</p> <pre data-index="22" class="set-code-show" name="code"><code class="hljs language-typescript"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-title function_">defineEventHandler</span>(<span class="hljs-function">(<span class="hljs-params">event</span>) =></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> <span class="hljs-string">`test post ts`</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>post请求需要使用postman工具: </p> <p><img alt="" height="174" src="https://1000bd.com/contentImg/2024/04/17/ac841e877b1a2f54.png" ></p> <p>6.9.5、 server/api/foo/[...].ts</p> <p>可以带有参数</p> <pre data-index="23" class="set-code-show" name="code"><code class="hljs language-coffeescript"><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> defineEventHandler(<span class="hljs-function"><span class="hljs-params">()</span> =></span> `<span class="language-javascript"><span class="hljs-keyword">default</span> api handle</span>`)</code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p> <img alt="" height="213" src="https://1000bd.com/contentImg/2024/04/17/d499ca809148b47a.png" ></p> <p> 6.9.6、server/api/submit.post.ts</p> <pre data-index="24" class="set-code-show" name="code"><code class="hljs language-csharp"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-function">export <span class="hljs-literal">default</span> <span class="hljs-title">defineEventHandler</span> (<span class="hljs-params"><span class="hljs-keyword">async</span> (<span class="hljs-keyword">event</span></span>)</span> => {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">const</span> body = <span class="hljs-keyword">await</span> readBody(<span class="hljs-keyword">event</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> { body }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="186" src="https://1000bd.com/contentImg/2024/04/17/92892cd34322991c.png" ></p> <p></p> <p> 6.9.7、server/api/query.get.ts</p> <pre data-index="25" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">export <span class="hljs-keyword">default</span> defineEventHandler((event) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> const query <span class="hljs-operator">=</span> getQuery(event)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> { a: query.param<span class="hljs-number">1</span>, b: query.param<span class="hljs-number">2</span> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="309" src="https://1000bd.com/contentImg/2024/04/17/336b30ee2b8f05e7.png" ></p> <h4 id="6.10%E3%80%81%E4%BD%BF%E7%94%A8element-plus"><a name="t15"></a><strong>6.10、使用element-plus</strong></h4> <p>6.10.1、安装</p> <blockquote> <p>pnpm install element-plus </p> </blockquote> <blockquote> <p>pnpm add  sass sass-loader -D</p> </blockquote> <blockquote> <p>pnpm add unplugin-auto-import unplugin-icons unplugin-vue-components -D</p> </blockquote> <p>6.10.2、package.json</p> <pre data-index="26" class="set-code-show" name="code"><code class="hljs language-csharp"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"private"</span>:<span class="hljs-literal">true</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"scripts"</span>:{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"build"</span>:<span class="hljs-string">"nuxt build"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"dev"</span>:<span class="hljs-string">"nuxt dev"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"generate"</span>:<span class="hljs-string">"nuxt generate"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"preview"</span>:<span class="hljs-string">"nuxt preview"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"postinstall"</span>:<span class="hljs-string">"nuxt prepare"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> },</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"devDependencies"</span>:{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"nuxt"</span>:<span class="hljs-string">"3.0.0"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"sass"</span>:<span class="hljs-string">"1.57.1"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"sass-loader"</span>:<span class="hljs-string">"13.2.8"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"unplugin-auto-import"</span>:<span class="hljs-string">".12.1"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"unplugin-icons"</span>:<span class="hljs-string">".14.15"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"unplugin-vue-components"</span>:<span class="hljs-string">".22.12"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> },</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"dependencies"</span>:{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"element-plus"</span>:<span class="hljs-string">"^2 .2.27"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.10.3、assets/scss/index.scss</p> <pre data-index="27" class="set-code-show" name="code"><code class="hljs language-less"><span class="hljs-variable">@use</span> <span class="hljs-string">"element-plus/dist/index.css"</span>;</code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.10.4、tsconfig.json</p> <pre data-index="28" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator">/</span><span class="hljs-operator">/</span> https:<span class="hljs-operator">/</span><span class="hljs-operator">/</span>nuxt.com<span class="hljs-operator">/</span>docs<span class="hljs-operator">/</span>guide<span class="hljs-operator">/</span>concepts<span class="hljs-operator">/</span>typescript</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"extends"</span>: <span class="hljs-string">"./.nuxt/tsconfig.json"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"compilerOptions"</span>: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"types"</span>: [<span class="hljs-string">"element-plus/global"</span>]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.10.5、 nuxt.config.ts</p> <pre data-index="29" class="set-code-show" name="code"><code class="hljs language-php"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">import AutoImport <span class="hljs-keyword">from</span> <span class="hljs-string">'unplugin-auto-import/vite'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">import Components <span class="hljs-keyword">from</span> <span class="hljs-string">"unplugin-vue-components/vite"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">import { ElementPlusResolver } <span class="hljs-keyword">from</span> <span class="hljs-string">'unplugin-vue-components/resolvers'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">import IconsResolver <span class="hljs-keyword">from</span> <span class="hljs-string">"unplugin-icons/resolver"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">const</span> <span class="hljs-variable constant_">lifecycle</span> = process.env.npm_lifecycle_event;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">export <span class="hljs-keyword">default</span> <span class="hljs-title function_ invoke__">defineNuxtConfig</span>({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">vite</span>: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">plugins</span>: [</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-title function_ invoke__">AutoImport</span>({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">resolvers</span>: [</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-title function_ invoke__">ElementPlusResolver</span>(</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ),</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-title function_ invoke__">IconsResolver</span>()]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }),</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-title function_ invoke__">Components</span>({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">dts</span>: <span class="hljs-literal">true</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">resolvers</span>: [<span class="hljs-title function_ invoke__">ElementPlusResolver</span>(</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">importStyle</span>: <span class="hljs-literal">false</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> )]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }),</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ],</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="24"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> },</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="25"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">components</span>: <span class="hljs-literal">true</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="26"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">css</span>: [<span class="hljs-string">"~/assets/scss/index.scss"</span>],</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="27"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">transpile</span>: [<span class="hljs-string">"element-plus"</span>],</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">build</span>: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-attr">transpile</span>: lifecycle === <span class="hljs-string">"build"</span> ? [<span class="hljs-string">"element-plus"</span>] : [],</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="30"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> },</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="31"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.10.6、plugins/element-plus.ts</p> <pre data-index="30" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">import { ID_INJECTION_<span class="hljs-keyword">KEY</span> } <span class="hljs-keyword">from</span> <span class="hljs-string">'element-plus'</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">export <span class="hljs-keyword">default</span> defineNuxtPlugin(nuxtApp <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator">/</span><span class="hljs-operator">/</span> Doing something <span class="hljs-keyword">with</span> nuxtApp</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> nuxtApp.vueApp.provide(ID_INJECTION_<span class="hljs-keyword">KEY</span>,{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> prefix: Math.floor(Math.<span class="hljs-keyword">random</span>() <span class="hljs-operator">*</span> <span class="hljs-number">10000</span>),</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> current: <span class="hljs-number">0</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> })</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> })</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.10.7、pages/index.vue</p> <pre data-index="31" class="set-code-show" name="code"><code class="hljs language-cobol"><span class="hljs-operator"><</span>el-button<span class="hljs-operator">></span> ElButton <span class="hljs-operator"><</span><span class="hljs-operator">/</span>el-button<span class="hljs-operator">></span></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.10.8、成功实现效果</p> <p><img alt="" height="158" src="https://1000bd.com/contentImg/2024/04/17/80bebe40ca821a65.png" ></p> <h4 id="6.11%E3%80%81%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE%20%7C%20Nuxt%203%20-%20%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3"><a name="t16"></a><strong>6.11、</strong><a href="https://www.nuxtjs.org.cn/usage/data-fetching.html" rel="nofollow" title="获取数据 | Nuxt 3 - 中文文档">获取数据 | Nuxt 3 - 中文文档</a></h4> <p>请求数据的方法有:useAsyncData、useLazyAsyncData (useAsyncData+lazy:true)、useFetch、useLazyFetch (useFetch+lazy:true)</p> <p><strong>pages/req.vue</strong></p> <pre data-index="32" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:1106px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>div <span class="hljs-keyword">class</span><span class="hljs-operator">=</span><span class="hljs-string">"container"</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span>h<span class="hljs-number">1</span><span class="hljs-operator">></span>snow<span class="hljs-operator"><</span><span class="hljs-operator">/</span>h<span class="hljs-number">1</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator"><</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>template<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>script setup lang<span class="hljs-operator">=</span><span class="hljs-string">"ts"</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">const token <span class="hljs-operator">=</span> useCookie(<span class="hljs-string">"token"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">const useFetchData <span class="hljs-operator">=</span> await useFetch(<span class="hljs-string">'https://md.abc.com.cn/m-staff-center/api/v1/role/pageList'</span>,{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">method</span>: <span class="hljs-string">"get"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> headers: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">'Authorization'</span> : `Bearer ${token.<span class="hljs-keyword">value</span>}`</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">console.log(<span class="hljs-string">'17useFetchData'</span>, useFetchData.<span class="hljs-keyword">data</span>._rawValue)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">const useAsyncDataData <span class="hljs-operator">=</span> await useAsyncData(<span class="hljs-string">'getRoleList'</span>, () <span class="hljs-operator">=</span><span class="hljs-operator">></span> $fetch(<span class="hljs-string">'https://md.abc.com.cn/m-staff-center/api/v1/role/pageList'</span>, {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">method</span>: <span class="hljs-string">"get"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> headers: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">'Authorization'</span> : `Bearer ${token.<span class="hljs-keyword">value</span>}`</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}))</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">console.log(<span class="hljs-string">'24useAsyncDataData'</span>, useAsyncDataData.<span class="hljs-keyword">data</span>._rawValue)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>数据获取成功:</p> <p><img alt="" height="407" src="https://1000bd.com/contentImg/2024/04/17/1f6f2d419cbfd3e3.png" ></p> <p>注:1,这里使用的全路径接口地址请求的数据,没有因为是本地开发出现跨域问题,同时没有配置代理。2、多次尝试配置代理,使用方法包括vite、nitro,均没有成功,网上暂时也没有找到明确的解答。3、如果后续有了代理相关的进展会及时更新。4、既然本地使用全路径没有跨域问题,那么我考虑在封装请求时候使用全局环境变量来拼接不同环境的域名+接口地址。</p> <h4 id="6.12%E3%80%81%E5%B0%81%E8%A3%85%E8%AF%B7%E6%B1%82"><a name="t17"></a><strong>6.12、封装请求</strong></h4> <p>6.12.1、utils/request.ts</p> <pre data-index="33" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">import { ElMessage } <span class="hljs-keyword">from</span> <span class="hljs-string">'element-plus'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">const fetch <span class="hljs-operator">=</span> (url: <span class="hljs-keyword">string</span>, <span class="hljs-keyword">options</span>?: <span class="hljs-keyword">any</span>): Promise<span class="hljs-operator"><</span><span class="hljs-keyword">any</span><span class="hljs-operator">></span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> const token <span class="hljs-operator">=</span> useCookie(<span class="hljs-string">"token"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> const headers <span class="hljs-operator">=</span> { <span class="hljs-operator">/</span><span class="hljs-operator">/</span> headers信息</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">'Authorization'</span> : `Bearer ${token.<span class="hljs-keyword">value</span>}`</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> const { public: { baseUrl } } <span class="hljs-operator">=</span> useRuntimeConfig()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> const reqUrl <span class="hljs-operator">=</span> baseUrl <span class="hljs-operator">+</span> url</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> new Promise((resolve, reject) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> useFetch(reqUrl, { ...<span class="hljs-keyword">options</span>, headers }).<span class="hljs-keyword">then</span>(({ <span class="hljs-keyword">data</span> }: <span class="hljs-keyword">any</span>) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> const <span class="hljs-keyword">value</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">data</span>.<span class="hljs-keyword">value</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (!<span class="hljs-keyword">data</span>._rawValue) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-operator">/</span><span class="hljs-operator">/</span> 这里处理错误回调</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> reject(<span class="hljs-keyword">value</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(<span class="hljs-keyword">data</span>._rawValue.<span class="hljs-keyword">code</span> !<span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'0'</span>){</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ElMessage({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> message: <span class="hljs-keyword">data</span>._rawValue.msg,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">type</span>: <span class="hljs-string">'error'</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> })</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> } <span class="hljs-keyword">else</span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> console.log(<span class="hljs-string">'40data'</span>, <span class="hljs-keyword">data</span>._rawValue)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> resolve(<span class="hljs-keyword">ref</span>(<span class="hljs-keyword">data</span>))</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="24"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="25"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }).catch((err: <span class="hljs-keyword">any</span>) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="26"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> reject(err)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="27"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> })</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> })</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="30"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="31"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">export <span class="hljs-keyword">default</span> new <span class="hljs-keyword">class</span> Http {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">get</span>(url: <span class="hljs-keyword">string</span>, params?: <span class="hljs-keyword">any</span>): Promise<span class="hljs-operator"><</span><span class="hljs-keyword">any</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> fetch(url, { <span class="hljs-keyword">method</span>: <span class="hljs-string">'get'</span>, params })</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> post(url: <span class="hljs-keyword">string</span>, params?: <span class="hljs-keyword">any</span>): Promise<span class="hljs-operator"><</span><span class="hljs-keyword">any</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="38"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> fetch(url, { <span class="hljs-keyword">method</span>: <span class="hljs-string">'post'</span>, params })</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="39"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="40"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="41"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> put(url: <span class="hljs-keyword">string</span>, body?: <span class="hljs-keyword">any</span>): Promise<span class="hljs-operator"><</span><span class="hljs-keyword">any</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="42"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> fetch(url, { <span class="hljs-keyword">method</span>: <span class="hljs-string">'put'</span>, body })</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="43"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="44"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="45"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">delete</span>(url: <span class="hljs-keyword">string</span>, body?: <span class="hljs-keyword">any</span>): Promise<span class="hljs-operator"><</span><span class="hljs-keyword">any</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="46"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> fetch(url, { <span class="hljs-keyword">method</span>: <span class="hljs-string">'delete'</span>, body })</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="47"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="48"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.12.2、baseUrl</p> <pre data-index="34" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:775px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator">/</span><span class="hljs-operator">/</span> 参见本文<span class="hljs-number">6.13</span>多环境开发</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">import { loadEnv } <span class="hljs-keyword">from</span> <span class="hljs-string">'vite'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">runtimeConfig: { <span class="hljs-operator">/</span><span class="hljs-operator">/</span> 运行时常量</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> public: { <span class="hljs-operator">/</span><span class="hljs-operator">/</span> 客户端-服务的都能访问</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> baseUrl: loadEnv(process.argv[process.argv.<span class="hljs-keyword">length</span>-<span class="hljs-number">1</span>], <span class="hljs-string">'./env'</span>).VITE_SERVER_NAME</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }, </div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.12.3、utils/api.ts</p> <pre data-index="35" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">import Http <span class="hljs-keyword">from</span> <span class="hljs-string">'@/utils/request'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">export const config<span class="hljs-number">1</span> <span class="hljs-operator">=</span> (params: <span class="hljs-keyword">any</span>) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> Http.<span class="hljs-keyword">get</span>(<span class="hljs-string">'/m-staff-center/api/v1/pageList'</span>, params)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">export const getVideoList <span class="hljs-operator">=</span> (params: <span class="hljs-keyword">any</span>) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> Http.post(<span class="hljs-string">'/m-staff-center/api/v1/getName'</span>, params)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.12.4、使用</p> <pre data-index="36" class="set-code-show" name="code"><code class="hljs language-typescript"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-title function_">config1</span>(<span class="hljs-string">''</span>).<span class="hljs-title function_">then</span>(<span class="hljs-function">(<span class="hljs-params">res: <span class="hljs-built_in">any</span></span>) =></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'27'</span>, res)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}).<span class="hljs-title function_">catch</span>(<span class="hljs-function">(<span class="hljs-params">err: <span class="hljs-built_in">any</span></span>)=></span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'29'</span>, err)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-title function_">getVideoList</span>(<span class="hljs-string">''</span>).<span class="hljs-title function_">then</span>(<span class="hljs-function">(<span class="hljs-params">res: <span class="hljs-built_in">any</span></span>) =></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'51'</span>, res)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}).<span class="hljs-title function_">catch</span>(<span class="hljs-function">(<span class="hljs-params">err: <span class="hljs-built_in">any</span></span>)=></span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'54'</span>, err)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>经测试,成功。 </p> <h4 id="6.13%E3%80%81%E5%A4%9A%E7%8E%AF%E5%A2%83%E5%BC%80%E5%8F%91"><a name="t18"></a><strong>6.13、多环境开发</strong></h4> <p>生产使用的项目通常会有dev、test、uat、pre、prd等环境,我们需要配置多种开发环境满足企业级开发要求。</p> <p>6.13.1、根目录创建env目录,创建环境变量文件</p> <p>文件命名规则 .env.[环境变量名,如dev]</p> <p><img alt="" height="218" src="https://1000bd.com/contentImg/2024/04/17/df4b4d0b54cc7717.png" ></p> <p> .env.dev文件,其他文件同理</p> <pre data-index="37" class="set-code-show" name="code"><code class="hljs language-csharp"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta"># 请求接口地址</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">VITE_REQUEST_BASE_URL = <span class="hljs-string">'/m-staff-center/api/v1'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">VITE_SERVER_NAME = <span class="hljs-string">'https://md.abc.com.cn/'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta"># VITE开头的变量才会被暴露出去</span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.13.2、package.json</p> <pre data-index="38" class="set-code-show" name="code"><code class="hljs language-csharp"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"scripts"</span>: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"build"</span>: <span class="hljs-string">"nuxt build"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"dev"</span>: <span class="hljs-string">"nuxt dev --mode dev"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"test"</span>: <span class="hljs-string">"nuxt dev --mode test"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"uat"</span>: <span class="hljs-string">"nuxt dev --mode uat"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"pre"</span>: <span class="hljs-string">"nuxt dev --mode pre"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"prd"</span>: <span class="hljs-string">"nuxt dev --mode prd"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"generate"</span>: <span class="hljs-string">"nuxt generate"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"preview"</span>: <span class="hljs-string">"nuxt preview"</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">"postinstall"</span>: <span class="hljs-string">"nuxt prepare"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> },</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>6.13.3、nuxt.config.ts</p> <pre data-index="39" class="set-code-show" name="code"><code class="hljs language-typescript"><ol class="hljs-ln" style="width:828px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">import</span> { loadEnv } <span class="hljs-keyword">from</span> <span class="hljs-string">'vite'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'基础服务路径'</span>, <span class="hljs-title function_">loadEnv</span>(process.<span class="hljs-property">argv</span>[process.<span class="hljs-property">argv</span>.<span class="hljs-property">length</span>-<span class="hljs-number">1</span>], <span class="hljs-string">'./env'</span>).<span class="hljs-property">VITE_SERVER_NAME</span>)</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="269" src="https://1000bd.com/contentImg/2024/04/17/e04fbea7528b9137.png" ></p> <p>多环境配置成功,环境变量可以用于本地代理使用,如本地代理使用环境域名,等。 </p> <h4 id="6.14%E3%80%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%83%A8%E7%BD%B2"><a name="t19"></a><strong>6.14、服务器部署</strong></h4> <div class="table-box"><table border="1" cellpadding="1" cellspacing="1" style="width:685px;"><tbody><tr><td>npm run build</td><td> <p>使用“混合渲染模式”创建一个.output目录。<br> 其中包含所有应用程序、服务器和依赖项,可用于生产。<br> 可通过node、<a href="https://so.csdn.net/so/search?q=pm2&spm=1001.2101.3001.7020" title="pm2">pm2</a>等启动后提供WEB服务。</p> <p>打包成混合渲染程序,常用。</p> </td><td style="width:194px;">打包生成.output<br><img alt="" height="112" src="https://1000bd.com/contentImg/2024/04/17/4d849040cfaf7c8b.png" ></td></tr><tr><td>npm run generate</td><td> <p>使用“SPA方式预渲染应用程序”的每个路由(启动server对整个程序代码中涉及的URL进行一次服务端和客户端渲染),将结果存储在纯 HTML 文件中,可以部署在任何静态托管服务上。<br> 该命令触发nuxi build带有prerender:true的参数。</p> <p>打包成SPA客户端渲染程序,常用。</p> </td><td style="width:194px;">打包生成dist<br><img alt="" height="197" src="https://1000bd.com/contentImg/2024/04/17/fab47dd202407373.png" ></td></tr></tbody></table></div> <p><strong>build:</strong>混合渲染模式,node启动项目(或者使用pm2),nginx做代理转发。</p> <p>node</p> <blockquote> <p>node ./.output/server/index.mjs</p> </blockquote> <p>pm2</p> <blockquote> <p>pm2 start ecosystem.config.js</p> </blockquote> <pre data-index="40" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator">/</span><span class="hljs-operator">/</span> 使用pm<span class="hljs-number">2</span>,根目录创建ecosystem.config.js</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">module.exports <span class="hljs-operator">=</span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> apps: [</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> name: <span class="hljs-string">'NuxtAppName'</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> exec_<span class="hljs-keyword">mode</span>: <span class="hljs-string">'cluster'</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> instances: <span class="hljs-string">'max'</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> script: <span class="hljs-string">'./.output/server/index.mjs'</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p> 未测试。</p> <pre data-index="41" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator">/</span><span class="hljs-operator">/</span> nginx配置 </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> listen <span class="hljs-number">80</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> server_name www.abc.com; <span class="hljs-operator">/</span><span class="hljs-operator">/</span> 域名</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">location</span> <span class="hljs-operator">/</span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> proxy_pass http:<span class="hljs-operator">/</span><span class="hljs-operator">/</span><span class="hljs-number">127.0.0.1</span>:<span class="hljs-number">3000</span>; <span class="hljs-operator">/</span><span class="hljs-operator">/</span> 转发到当前服务器<span class="hljs-number">3000</span>端口</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>已测试,成功。</p> <p><strong>generate:</strong>预渲染模式,生成静态资源,nginx直接启服务。</p> <p>已测试,成功。</p> <h4 id="6.15%E3%80%81%E5%85%B6%E4%BB%96%E5%86%85%E5%AE%B9"><a name="t20"></a><strong>6.15、其他内容</strong></h4> <p>待补充</p> <h4 id="%E4%B8%83%E3%80%81%E8%BF%87%E7%A8%8B%E8%AE%B0%E5%BD%95"><a name="t21"></a><strong>七、过程记录</strong></h4> <h4 id="7.1%E3%80%81init%E9%A1%B9%E7%9B%AE%E4%B8%8D%E6%88%90%E5%8A%9F"><a name="t22"></a>7.1、init项目不成功</h4> <p><img alt="" height="229" src="https://1000bd.com/contentImg/2024/04/17/eca694cd04fe4799.png" >解1:墙内的同学可能创建不成功,这里推荐一个链接:<a href="https://link.zhihu.com/?target=https%3A//github.com/nuxt/starter" title="https://github.com/nuxt/starter">https://github.com/nuxt/starter</a></p> <p>解2:开始使用科学上网的方法也没有下载成功,后来使用了付费科学上网的方法下载成功。下载成功后如图。</p> <p><img alt="" height="199" src="https://1000bd.com/contentImg/2024/04/17/bbeb4d61f461722e.png" ></p> <h4 id="7.2%E3%80%81useHead%E6%8E%A5%E6%94%B6%E5%8F%82%E6%95%B0%E5%A6%82%E4%B8%8B"><a name="t23"></a>7.2、useHead接收参数如下</h4> <pre data-index="42" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">useHead(meta: Computable<span class="hljs-operator"><</span>MetaObject<span class="hljs-operator">></span>): void</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">interface</span> MetaObject extends <span class="hljs-keyword">Record</span><span class="hljs-operator"><</span><span class="hljs-keyword">string</span>, <span class="hljs-keyword">any</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> charset?: <span class="hljs-keyword">string</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> viewport?: <span class="hljs-keyword">string</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> meta?: Array<span class="hljs-operator"><</span><span class="hljs-keyword">Record</span><span class="hljs-operator"><</span><span class="hljs-keyword">string</span>, <span class="hljs-keyword">any</span><span class="hljs-doctag">>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> link?: Array<span class="hljs-operator"><</span><span class="hljs-keyword">Record</span><span class="hljs-operator"><</span><span class="hljs-keyword">string</span>, <span class="hljs-keyword">any</span><span class="hljs-doctag">>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> style?: Array<span class="hljs-operator"><</span><span class="hljs-keyword">Record</span><span class="hljs-operator"><</span><span class="hljs-keyword">string</span>, <span class="hljs-keyword">any</span><span class="hljs-doctag">>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> script?: Array<span class="hljs-operator"><</span><span class="hljs-keyword">Record</span><span class="hljs-operator"><</span><span class="hljs-keyword">string</span>, <span class="hljs-keyword">any</span><span class="hljs-doctag">>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> noscript?: Array<span class="hljs-operator"><</span><span class="hljs-keyword">Record</span><span class="hljs-operator"><</span><span class="hljs-keyword">string</span>, <span class="hljs-keyword">any</span><span class="hljs-doctag">>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> titleTemplate?: <span class="hljs-keyword">string</span> | ((title: <span class="hljs-keyword">string</span>) <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">string</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> title?: <span class="hljs-keyword">string</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> bodyAttrs?: <span class="hljs-keyword">Record</span><span class="hljs-operator"><</span><span class="hljs-keyword">string</span>, <span class="hljs-keyword">any</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> htmlAttrs?: <span class="hljs-keyword">Record</span><span class="hljs-operator"><</span><span class="hljs-keyword">string</span>, <span class="hljs-keyword">any</span><span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <pre data-index="43" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:831px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">charset: 指定 HTML 的字元编码,预设为 utf-<span class="hljs-number">8</span>。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">viewport: 设定网页的可见区域,预设为 width<span class="hljs-operator">=</span>device-width, initial-scale<span class="hljs-operator">=</span><span class="hljs-number">1</span>。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">meta: 接受一个阵列,阵列中的每个元素,都將会建立一个 <span class="hljs-operator"><</span>meta<span class="hljs-operator">></span> 标记,元素中物件的属性将对应至的属性。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">link: 接受一个阵列,阵列中的每个元素,都将会建立一个 <span class="hljs-operator"><</span>link<span class="hljs-operator">></span> 标记,元素中物件的属性将对应至的属性。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">style: 接受一个阵列,阵列中的每個元素,都将会建立一个 <span class="hljs-operator"><</span>style<span class="hljs-operator">></span> 标记,元素中物件的属性将对应至的属性。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">script: 接受一个阵列,阵列中的每個元素,都将会建立一个 <span class="hljs-operator"><</span>script<span class="hljs-operator">></span> 标记,元素中物件的属性将对应至的属性。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">noscript: 接受一个阵列,阵列中的每個元素,都将会建立一个 <span class="hljs-operator"><</span>noscript<span class="hljs-operator">></span> 标记,元素中物件的属性将对应至的属性。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">titleTemplage: 接受一個字串或函數,用來动态的设定该页面元件的网页标题。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">title: 在页面元件设置静态的网页标题。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">bodyAttrs: 接受一个物件,设置网页中标识的属性,物件中的属性将对应至的属性。</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">htmlAttrs: 接受一个物件,设置网页中标识的属性,物件中的属性将对应至的属性。</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>理解useHead:相当于设置页面<head>标签内相关内容。</p> <h4 id="7.3%E3%80%81%E5%87%BA%E7%8E%B0%E7%B1%BB%E4%BC%BC%E5%8C%85%E4%B8%8D%E8%83%BD%E8%A7%A3%E6%9E%90%E7%9A%84%E9%97%AE%E9%A2%98"><a name="t24"></a>7.3、出现类似包不能解析的问题</h4> <p><img alt="" height="526" src="https://1000bd.com/contentImg/2024/04/17/4a5f96e1754c1928.png" ></p> <p>解决:</p> <p>根目录创建 .npmrc 文件</p> <pre data-index="44" class="set-code-show" name="code"><code class="hljs language-cobol">shamefully-hoist <span class="hljs-operator">=</span> <span class="hljs-keyword">true</span></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>删除node_modules,再次执行pnpm install ,解决成功 </p> <p>有些包仅在根目录的node_modules时才有效,可以通过此配置,提升那些不在node_modules根目录的包。</p> <p>或者执行:</p> <pre data-index="45" class="set-code-show" name="code"><code class="hljs language-css">pnpm <span class="hljs-selector-tag">i</span> <span class="hljs-attr">--shamefully-hoist</span></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>两种方法均测试成功。</p> <h4 id="7.4%E3%80%81publicPath%20(nuxt2.X)%C2%A0%20%E7%AD%89%E5%90%8C%E4%BA%8E%C2%A0%C2%A0baseURL%20(nuxt3.0)"><a name="t25"></a><strong>7.4、publicPath (nuxt2.X)  等同于  baseURL (nuxt3.0)</strong></h4> <p><a href="https://nuxt.com/docs/api/configuration/nuxt-config#baseurl" rel="nofollow" title="Nuxt Configuration Reference · Nuxt">Nuxt Configuration Reference · Nuxt</a></p> <p>7.4.1、nuxt2.x,nuxt.config.js</p> <pre data-index="46" class="set-code-show" name="code"><code class="hljs language-css"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">build: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> publicPath: process.env.PUBLIC_PATH,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p>7.4.2、nuxt3,nuxt.config.ts</p> <pre data-index="47" class="set-code-show" name="code"><code class="hljs language-css"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">app: {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> baseURL: <span class="hljs-string">'/m-abc-pc'</span>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="587" src="https://1000bd.com/contentImg/2024/04/17/a4ddd904d10a3f52.png" ></p> <p>7.4.3、使用场景</p> <p>使用这一项配置的时候请求资源的地址就会有这个目录,如下图,在服务区部署时候很重要。</p> <p><img alt="" height="106" src="https://1000bd.com/contentImg/2024/04/17/632f287af7465bb9.png" ></p> <h4 id="7.5%E3%80%81%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E4%BF%AE%E6%94%B9%E7%AB%AF%E5%8F%A3"><a name="t26"></a>7.5、开发环境修改端口</h4> <p><img alt="" height="301" src="https://1000bd.com/contentImg/2024/04/17/92bf9bd45cefeecb.png" ></p> <p><img alt="" height="148" src="https://1000bd.com/contentImg/2024/04/17/29049a888264ab99.png" ></p> <h4 id="7.6%E3%80%81%E8%AE%BE%E7%BD%AE%E7%BD%91%E7%AB%99%C2%A0favicon"><a name="t27"></a><strong>7.6、设置网站 favicon</strong></h4> <p>7.6.1、favicon.ico 文件放在public目录下。</p> <p><img alt="" height="95" src="https://1000bd.com/contentImg/2024/04/17/15f400dba7ee7e2b.png" ></p> <p>7.6.2、nuxt.config.ts  app/head/link下增加相应内容</p> <pre data-index="48" class="set-code-show" name="code"><code class="hljs language-bash"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">link</span>: [</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> { rel: <span class="hljs-string">"icon"</span>, href: <span class="hljs-string">"/favicon.ico"</span>, <span class="hljs-built_in">type</span>: <span class="hljs-string">'image/x-icon'</span>},</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">],</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="391" src="https://1000bd.com/contentImg/2024/04/17/37fd8352c9664f70.png" ></p> <p>经过测试,成功。</p> <h4><a name="t28"></a><strong>7.7、增加百度验证、sitmap</strong></h4> <p>放在public目录即可</p> <p><img alt="" height="334" src="https://1000bd.com/contentImg/2024/04/17/cb148399f16def87.png" ></p> <h4><a name="t29"></a>7.8、动态生成sitemap</h4> <p><a href="https://blog.csdn.net/weixin_49684489/article/details/128128273" title="nuxt3 生成sitemap.xml 动静态站点地图_nuxt3 sitemap_摆烂吧小李的博客-CSDN博客">nuxt3 生成sitemap.xml 动静态站点地图_nuxt3 sitemap_摆烂吧小李的博客-CSDN博客</a></p> <p><a href="https://blog.csdn.net/Steven_Son/article/details/127922593" title="nuxt 如何生成sitemap.xml 动静态站点地图_nuxt3 sitemap_HaushoLin的博客-CSDN博客">nuxt 如何生成sitemap.xml 动静态站点地图_nuxt3 sitemap_HaushoLin的博客-CSDN博客</a></p> <h4><a name="t30"></a>7.9、增加百度统计</h4> <p>nuxt3根目录app.vue文件增加代码如下</p> <pre data-index="49" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span>script setup<span class="hljs-operator">></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">const route <span class="hljs-operator">=</span> useRoute()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">useHead({</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> script: [</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> src: <span class="hljs-string">'https://hm.baidu.com/hm.js?xxxxxxkeyxxxxxx'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">watch(route, () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (_hmt) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> _hmt.push([<span class="hljs-string">'_trackPageview'</span>, route.path])</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-operator"><</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span></div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><img alt="" height="596" src="https://1000bd.com/contentImg/2024/04/17/9ae452ed41f49f9a.png" ></p> <p>经过验证,百度统计成功,OK</p> <h4><a name="t31"></a>7.10、使用window.location</h4> <p>在onMounted使用即可,否则会报错</p> <pre data-index="50" class="set-code-show" name="code"><code class="hljs language-cobol"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">onMounted(()<span class="hljs-operator">=</span><span class="hljs-operator">></span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> form.sourceUrl <span class="hljs-operator">=</span> window.<span class="hljs-keyword">location</span>.href</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">})</div></div></li></ol></code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <h4><a name="t32"></a>7.11、出现数据没有渲染到页面的情况 / 数据在页面渲染了但是查看源代码时候没有内容</h4> <p><strong>v-if   vs   v-show</strong></p> <p>出现数据没有渲染到页面的情况  或 数据在页面渲染了但是查看源代码(ctrl + u)时候没有内容,经过多方排查,是页面内容使用了 v-if,导致的,建议改成v-show,问题解决了。</p> <h4><a name="t33"></a>7.12、Nuxt.js 3 中的 Composable 对象与 Vuex</h4> <p>Composable 对象是 Nuxt.js 3 中一个新的概念,它类似于 Vue 3 中的 Composition API 。它是一种组织和共享逻辑代码的方式,可以使代码更加模块化和易于维护。Composable 对象可以访问组件的上下文,包括 props、data、methods、computed 等,同时也可以访问到 Nuxt.js 的一些核心功能,比如路由、HTTP 请求等。</p> <p>Vuex 是一个专门为 Vue.js 开发的状态管理库,它可以帮助我们管理应用程序中的共享状态。Vuex 中的状态是响应式的,这意味着当我们修改状态时,Vue.js 可以自动更新相关的组件。Vuex 中的状态可以被所有组件访问,这种方式可以使得数据共享更加简单和可预测。</p> <p>Composable 对象和 Vuex 都可以用于管理应用程序的状态和逻辑,它们之间的主要区别在于:</p> <p>- Composable 对象是一种组织和共享逻辑代码的方式,它更加灵活,可以根据需要自由组合和拆分 Composable 对象。而 Vuex 是一个专门为 Vue.js 开发的状态管理库,提供了一些特定的概念和 API,需要按照一定的规则进行使用。<br> - Composable 对象是针对组件级别的,它可以访问组件的上下文,而 Vuex 是针对整个应用程序的,它可以被所有组件访问。<br> - Composable 对象适用于简单的状态和逻辑,如果应用程序的状态非常复杂,使用 Vuex 可能更加合适。</p> <h4><a name="t34"></a>7.13、Nuxt.js 3 中的 Composable可以持久化吗</h4> <p>在 Nuxt.js 3 中,Composable 对象本身是不具备数据持久化功能的。Composable 对象主要用于组织和共享逻辑代码,并提供一些方法和事件来更新组件的状态。</p> <p>如果需要实现数据持久化功能,可以结合其他工具或插件来实现。比如可以使用 Vuex 来管理应用程序的状态,并配合使用插件如 Vuex Persisted State 或 Vuex Local Storage 插件来实现数据持久化。这些插件可以将 Vuex store 中的数据持久化到浏览器的本地存储中,从而在页面刷新或关闭后仍然可以保留状态数据。</p> <p>另外,Nuxt.js 3 也提供了一些自带的数据持久化方案,比如使用 `nuxt-storage` 模块来实现浏览器存储功能。这个模块可以通过 `$storage` 对象提供类似 Vuex 的 API,可以方便地将数据持久化到本地存储中。</p> <p>综上所述,虽然 Composable 对象本身不具备数据持久化功能,但可以结合其他工具或插件来实现这个功能。</p> <h4 style="background-color:transparent;"><a name="t35"></a>7.14、NUXT3自定义IP和端口</h4> <pre data-index="51" class="set-code-show" name="code"><code class="hljs language-cobol">PORT<span class="hljs-operator">=</span><span class="hljs-number">3001</span> node .<span class="hljs-operator">/</span>.<span class="hljs-keyword">output</span><span class="hljs-operator">/</span>server<span class="hljs-operator">/</span><span class="hljs-keyword">index</span>.mjs</code><div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><a href="https://segmentfault.com/q/1010000042404859?bd_source_light=4746641" rel="nofollow" title="滑动验证页面">滑动验证页面</a></p> <p><a href="https://www.cnblogs.com/hy999/p/NUXT3_PORT_HOST.html" rel="nofollow" title="https://www.cnblogs.com/hy999/p/NUXT3_PORT_HOST.html">https://www.cnblogs.com/hy999/p/NUXT3_PORT_HOST.html</a></p> <h4 id="%E5%85%AB%E3%80%81%E6%AC%A2%E8%BF%8E%E4%BA%A4%E6%B5%81%E6%8C%87%E6%AD%A3%EF%BC%8C%E5%85%B3%E6%B3%A8%E6%88%91%EF%BC%8C%E4%B8%80%E8%B5%B7%E5%AD%A6%E4%B9%A0%E3%80%82"><a name="t36"></a><strong>八、欢迎交流指正,关注我,一起学习</strong></h4> <h4 id="%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5%EF%BC%9A"><a name="t37"></a><strong>九、参考链接</strong></h4> <p><a href="https://nitro.unjs.io/config/" rel="nofollow" title="Configuration | ⚗️ Nitro">Configuration | ⚗️ Nitro</a></p> <p><a href="https://ithelp.ithome.com.tw/articles/10306669" rel="nofollow" title="[Day 24] Nuxt 3 搜尋引擎最佳化 (SEO) 與 HTML Meta Tag - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天">[Day 24] Nuxt 3 搜尋引擎最佳化 (SEO) 與 HTML Meta Tag - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天</a></p> <p><a href="https://blog.csdn.net/fat_shady/article/details/126118245" title="Nuxt3-动态更改meta信息(关键词、标题、描述)_fat_shady的博客-CSDN博客">Nuxt3-动态更改meta信息(关键词、标题、描述)_fat_shady的博客-CSDN博客</a></p> <p><a href="https://zhuanlan.zhihu.com/p/535230945" rel="nofollow" title="令人愉快的 Nuxt3 教程 (一): 应用的创建与配置 - 知乎">令人愉快的 Nuxt3 教程 (一): 应用的创建与配置 - 知乎</a></p> <p><a href="https://jspang.com/article/86" rel="nofollow" title="技术胖-Nuxt3从零到实战手把手 免费视频图文教程">技术胖-Nuxt3从零到实战手把手 免费视频图文教程</a></p> <p><a href="https://zhuanlan.zhihu.com/p/584162070" rel="nofollow" title="Nuxt.js 3.0 正式发布! - 知乎">Nuxt.js 3.0 正式发布! - 知乎</a></p> <p></p> </div> </div> </li> <li class="list-group-item ul-li"> <b>相关阅读:</b><br> <nobr> <a href="/Article/Index/811091">centos7 dubbo安装</a> <br /> <a href="/Article/Index/862476">时间空间复杂度分析--冒泡排序算法</a> <br /> <a href="/Article/Index/1251436">Android 9.0 网络之netd详解</a> <br /> <a href="/Article/Index/1353462">如何在Go中使用操作符进行数学运算</a> <br /> <a href="/Article/Index/662586">【数据治理】揭开主数据管理的陷阱</a> <br /> <a href="/Article/Index/1112521">14、Horizontal Pod Autoscal</a> <br /> <a href="/Article/Index/1527048">Docker容器常用命令笔记分享</a> <br /> <a href="/Article/Index/668589">弘辽科技:网店提升销量先提升流量吗?怎么提升流量?</a> <br /> <a href="/Article/Index/816619">httprunner中使用JMESPath进行数据提取技巧</a> <br /> <a href="/Article/Index/918631">springboot+vue云 农产品中心门户系统</a> <br /> </nobr> </li> <li class="list-group-item from-a mb-2"> 原文地址:https://blog.csdn.net/snowball_li/article/details/128013833 </li> </ul> </div> <div class="col-lg-4 col-sm-12"> <ul class="list-group" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 最新文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/1484446">攻防演习之三天拿下官网站群</a> <br /> <a href="/Article/Index/1515268">数据安全治理学习——前期安全规划和安全管理体系建设</a> <br /> <a href="/Article/Index/1759065">企业安全 | 企业内一次钓鱼演练准备过程</a> <br /> <a href="/Article/Index/1485036">内网渗透测试 | Kerberos协议及其部分攻击手法</a> <br /> <a href="/Article/Index/1877332">0day的产生 | 不懂代码的"代码审计"</a> <br /> <a href="/Article/Index/1887576">安装scrcpy-client模块av模块异常,环境问题解决方案</a> <br /> <a href="/Article/Index/1887578">leetcode hot100【LeetCode 279. 完全平方数】java实现</a> <br /> <a href="/Article/Index/1887512">OpenWrt下安装Mosquitto</a> <br /> <a href="/Article/Index/1887520">AnatoMask论文汇总</a> <br /> <a href="/Article/Index/1887496">【AI日记】24.11.01 LangChain、openai api和github copilot</a> <br /> </nobr> </li> </ul> <ul class="list-group pt-2" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 热门文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/888177">十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!</a> <br /> <a href="/Article/Index/797680">奉劝各位学弟学妹们,该打造你的技术影响力了!</a> <br /> <a href="/Article/Index/888183">五年了,我在 CSDN 的两个一百万。</a> <br /> <a href="/Article/Index/888179">Java俄罗斯方块,老程序员花了一个周末,连接中学年代!</a> <br /> <a href="/Article/Index/797730">面试官都震惊,你这网络基础可以啊!</a> <br /> <a href="/Article/Index/797725">你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法</a> <br /> <a href="/Article/Index/797702">心情不好的时候,用 Python 画棵樱花树送给自己吧</a> <br /> <a href="/Article/Index/797709">通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!</a> <br /> <a href="/Article/Index/797716">13 万字 C 语言从入门到精通保姆级教程2021 年版</a> <br /> <a href="/Article/Index/888192">10行代码集2000张美女图,Python爬虫120例,再上征途</a> <br /> </nobr> </li> </ul> </div> </div> </div> <!-- 主体 --> <!--body结束--> <!--这里是footer模板--> <!--footer--> <nav class="navbar navbar-inverse navbar-fixed-bottom"> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="text-muted center foot-height"> Copyright © 2022 侵权请联系<a href="mailto:2656653265@qq.com">2656653265@qq.com</a>    <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备2022015340号-1</a> </div> <div style="width:300px;margin:0 auto; padding:0px 5px;"> <a href="/regex.html">正则表达式工具</a> <a href="/cron.html">cron表达式工具</a> <a href="/pwdcreator.html">密码生成工具</a> </div> <div style="width:300px;margin:0 auto; padding:5px 0;"> <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502049817" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"> <img src="" style="float:left;" /><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">京公网安备 11010502049817号</p></a> </div> </div> </div> </div> </nav> <!--footer--> <!--footer模板结束--> <script src="/js/plugins/jquery/jquery.js"></script> <script src="/js/bootstrap.min.js"></script> <!--这里是scripts模板--> <!--scripts模板结束--> </body> </html>