Nuxt 填坑集合(面向实际开发解决方案)

前言

在 nuxt 开发的过程中,遇到了一些坑,通过官方文档和面向百度式的学习,这些坑得到了解决,最后将这些坑的解决方式记录下来。无需全文阅读,直接阅读需求内容即可。「后续还会更新nuxt相关的坑,并欢迎指正」

样式分类

当页面结构足够复杂时,template、srcitp、style 全部代码都写在 .vue 文件就会显得冗余,并且需要代码查看时也不方便,可以将样式代码抽离,单独存放一个样式文件中(如:.css、.scss)。本文样式文件为scss,其它样式文件同理。

基本结构
├─ assets - 资产目录
│  └─ scss - 样式资产.scss
│  │  ├─ page - 页面样式文件目录
│  │  │  ├─ ….scss - 其它样式文件
│  │  │  └─ index.scss - 首页样式文件
│  │  │  var.scss - 公共变量「按需创建」
│  │  └─ styles.scss - 需要抽离的样式文件主入口
└─ pages - 页面目录
   ├─ ….vue - 其它页面文件
   └─ index.vue - 首页
// styles.scss
// 公共变量需要提前声明:
$theme-color: #096; // 直接定义;
@import "pages/var.scss"; // 或使用文件,单独存放公共变量。

// 将页面样式目录下的样式文件全部引入
@import "pages/….scss";
@import "pages/index.scss";
// nuxt.config.js
export default {
  // 添加以下配置,在项目运行或打包时,会自动引用 styles.scss文件
  css: [
    { src: '~/assets/scss/styles.scss' }
  ]
}

api 请求

axios

正常 使用 create-nuxt-app 初始化项目,能够直接添加 axios。

# 安装 axios
npm install @nuxtjs/axios --save
// nuxt.config.js
export default {
  // 添加以下配置,即可
  modules: [
    // https://go.nuxtjs.dev/axios
    '@nuxtjs/axios',
  ],
}

完成上述步骤,即可在项目中使用 axios 请求。

// 在 created 生命周期函数中请求
created() {
  this.$axios.get('/接口地址')
    .then(res => {
      console.log(res)
    })
    .catch(e => {
      console.log(e)
    })
}

跨域、代理

当 axios 请求时,出现跨域问题。需要通过代理来解决。

步骤主要分为安装、配置两步。

# 安装 proxy
npm install @nuxtjs/proxy --save
export default {
  // 添加以下配置
  axios: {
    proxy: true, // 表示开启代理
    prefix: '/api', // 表示给请求url加个前缀 /api -> 本地调试 http://localhost:3000/api/
    credentials: true // 表示跨域请求时是否需要使用凭证
  },
  proxy: {
    '/api': {
      target: 'http://www.request.cn/api', // 目标接口域名 -> 项目打包 http://www.request.cn/api
      changeOrigin: true, // 表示是否跨域
      pathRewrite: {
        '^/api': '' // 打包时把 /api 替换成 ''
      }
    }
  },
}

SEO

搜索引擎优化(Search Engine Optimization; SEO)

搜索引擎优化分为站外SEO和站内SEO两种。SEO的主要工作是通过了解各类搜索引擎如何抓取互联网页面、如何进行索引以及如何确定其对某一特定关键词的搜索结果排名等技术,来对网页进行相关的优化,使其提高搜索引擎排名,从而提高网站访问量,最终提升网站的销售能力或宣传能力的技术。

对于前端来说,进行 seo 优化主要有 title标签、 meta元标签 等(俗称:tdk)。

<title>网站标题</title>
<meta name="description" content="网站描述" />
<meta name="keywords" content="网站关键词" />

<img alt="图片无法加载时显示的问题" title="鼠标悬浮图片时显示的文字"> <!-- 也能被 seo 相关爬虫抓取到 -->

数据动态设定

nuxt 项目中可以在 nuxt.config.js 中配置全局静态 tdk 数据,也可以在 pages 目录页面中使用 nuxt 内置方法 head() 设置本地静态 tdk 数据。

image.png

更多 head 静态配置:nuxtjs meta-tags-seo

当更改时,需要找到对应的代码文件才能更改,不利于后期维护,所以一般是通过 API请求 + head() 进行动态设定。

// 需要动态设定的 .vue 页面文件
<template></template>
<script>
export default {
  // 1. 数据获取
  // asyncData不能使用this(当前组件)
  // 提供第一个参数context,表示上下文(nuxt 所有功能)
  // 或 对context对象进行解构,context.$axios —> { $axios }
  async asyncData({ $axios }) {
    return await $axios
      .$post(`需要请求的接口`, {
        [参数名]: '值'
      })
      .then((res) => {
        const { msg } = res
        return {
          title: msg.title,
          description: msg.description,
          keywords: msg.keywords,
        }
      })
      .catch((err) => {
        throw new Error(err)
      })
  },
  // 2. 数据设定
  head() {
    return {
      title: this.title,
      meta: [
        { hid: 'description', name: 'description', content: this.description },
        { hid: 'keywords', name: 'keywords', content: this.keywords },
      ]
    }
  }
}
</script>
<style></style>

connect ECONNREFUSED

情景复现:如果页面没有使用async asyncData方法去请求后台地址能正常请求,如果使用了该方法去请求后台就会报下面的异常。

// 异常信息
connect ECONNREFUSED 127.0.0.1:80 at TCPConnectWrap.afterConnect [as oncomplete]

解决方法一:

// nuxt.config.js
export default {
  // 添加以下配置
  server: {
    port: 80,
    host: '0.0.0.0'
  },
}

解决方法二:

// package.json
{
  // 添加以下配置
  "config": {
    "nuxt": {
      "host": "0.0.0.0",
      "port": "80"
    }
  }
}

更多 connect ECONNREFUSED 异常说明:异常的解决-大橙子Hi

项目打包

当 nuxt 项目打包运行时,css部分样式、nuxt请求方法 会被打包在 .html 中,这样并不利于源码查看,及 SEO 排名。

css内部样式:
fc84cbdc0765491386c4a2e873e0ca02_tplv-k3u1fbpfcp-watermark.webp

window.__NUXT___ 匿名方法:
39e940c6342a471491a38ae1f6f7af71_tplv-k3u1fbpfcp-watermark.webp

css 自动创建文件,并引用

// nuxt.config.js 文件
export default {
  build: {
    extractCSS: { allChunks: true }, // 添加此配置,重新打包即可
  }
}

js 自动创建文件,并引用

方法一、修改 vue-renderer.js 文件

// node_modules/@nuxt/vue-renderer/dist/vue-renderer.js
APP += `<script>${serializedSession}</script>` // 注释此语句,重新打包即可

方法二、nuxt.config.js 添加配置项

// 添加 hooks 配置项,重新打包即可
hooks: {
  'vue-renderer:ssr:context'(context) {
    const routePath = JSON.stringify(context.nuxt.routePath)
    context.nuxt = { serverRendered: true, routePath }
  }
},

更多 nuxt相关打包内容:NUXT去掉源代码里面的css和window.__NUXT__ - CV大法师

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 很抱歉,Nuxt.js 是一个基于 Vue.js 的服务器端渲染(SSR)框架,而微信小程序是一个基于微信官方的跨平台开发框架,它们并不直接兼容。 但是,如果你想将你在 Nuxt.js开发的应用移植到微信小程序,你可以考虑使用小程序框架 MPVue开发微信小程序。 MPVue 是一个使用 Vue.js 语法开发小程序的框架,可以使你的代码尽量保持一致,并且同时享受 Vue.js 和小程序的优点。 如果您对如何在 MPVue开发微信小程序有兴趣,可以参考 MPVue 官方文档和示例项目。 ### 回答2: 使用Nuxt开发微信小程序需要以下步骤: 1. 环境配置:首先需要确保在开发环境中已经安装了Node.jsNuxt.js。可以使用npm或者yarn来安装这些依赖。 2. 创建Nuxt项目:使用Nuxt的命令行工具创建一个新的项目,可以使用命令`npx create-nuxt-app <project-name>`来创建项目。在创建项目的过程中,可以选择使用Vue.js和其他附加模块等。 3. 配置微信小程序:在项目根目录下的`nuxt.config.js`文件中,可以配置一些微信小程序的相关参数,例如小程序的app ID、app secret等。还可以根据需求配置其他Nuxt.js相关的配置项。 4. 开发小程序页面:在Nuxt项目中,可以使用Vue组件的方式来创建小程序页面。可以在`pages`目录下创建子目录和文件来定义页面和路由。在页面组件中,可以使用`<template>``<script>`和`<style>`标签来定义页面的模板、逻辑和样式。 5. 编写业务逻辑:在小程序页面中,可以编写业务逻辑代码。可以使用Vue.js的语法和Nuxt.js的内置功能,例如使用`this.$axios`发送网络请求、使用Nuxt的插件和中间件等。 6. 编译和部署:完成页面开发后,可以使用Nuxt提供的命令进行编译和打包,生成微信小程序所需的文件。最后可以使用微信开发者工具来预览和部署小程序。 需要注意的是,Nuxt.js是基于Vue.js的框架,可以很方便地开发和构建Web应用程序。但是在开发微信小程序时,需要注意一些微信小程序的特殊限制和要求,例如文件目录结构、API调用方式等。 希望以上回答对您有所帮助! ### 回答3: 要使用Nuxt开发微信小程序,您可以按照以下步骤进行: 1. 安装Nuxt.js:首先,您需要在计算机上安装Nuxt.js。您可以通过使用npm(Node.js包管理器)运行以下命令来执行此操作: ```shell npm install --global create-nuxt-app ``` 2. 创建新项目:使用Nuxt.js的命令行工具创建一个新的Nuxt项目。您可以按照提示进行操作,包括选择小程序模板和其他配置选项。 ```shell npx create-nuxt-app my-app ``` 这将创建一个名为`my-app`的新项目。 3. 配置微信小程序:进入新创建的项目文件夹,并找到`nuxt.config.js`文件。在该文件中,您可以配置用于微信小程序的相关设置,例如小程序的APPID和页面路径等。确保按照微信小程序开发文档的要求进行配置。 4. 开发微信小程序页面:在`pages`文件夹中创建您的小程序页面。您可以使用Vue.jsNuxt.js开发方式来编写小程序页面。您可以使用我们提供的组件和方法,以及使用asyncData()和fetch()方法进行数据获取。 5. 构建并运行:当您完成页面的开发后,使用以下命令构建并运行您的微信小程序。 ```shell npm run build npm run dev:wechat ``` 前一个命令将构建您的项目,而后一个命令将启动微信开发者工具,并将您的小程序加载到其中。您可以使用微信开发者工具来预览和调试您的小程序。 6. 发布小程序:一旦您认为小程序已准备好发布,您可以按照微信小程序开发文档的指导发布您的小程序。按照指示进行微信小程序的配置和上传等步骤。 注意:请确保阅读和遵循微信小程序开发文档中的要求和指导,以使您开发的小程序能够正常运行并通过审核。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俊小赞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值