本文会不定期更新在nuxt.js中遇到的问题进行汇总。转发请注明出处,尊重作者,谢谢!

强烈推荐作者文档版踩坑指南,点击跳转踩坑指南

在Nuxt的官方文档中,中文文档和英文文档都存在着不小的差异。

1.路径匹配问题:

In Nuxt.js, the path match is as follows:

@import url('~assets/css/style.css') //Error

This path matching is an error, and writing it like this is possible:

@import url('~/assets/css/style.css') //success

也就是说,在最新版本更新中,官方修复了路径匹配问题:

而官方推荐使用~/assets匹配路径,而不是使用在中文文档中的~assets去匹配路径。

而在中文文档中,也并未见修复及更改此问题。

2.按需引入(UI框架等等)

例如使用UI框架:element-ui

我找了很多相关文章,并没有详细说明该如何引入。所以我要拿出来将他说明:

先来看下,如果不按需引入vendor.js的体积大小为:

第一步,下载依赖:


# 先下载element-ui npm install element-ui --save # 如果使用按需引入,必须安装babel-plugin-component(官网有需要下载说明,此插件根据官网规则不同,安装插件不同) npm install babel-plugin-component --save-dev

安装好以后,按照nuxt.js中的规则,你需要在 plugins/ 目录下创建相应的插件文件

文件根目录创建(或已经存在)plugins/目录,创建名为:element-ui.js的文件,内容如下:


import Vue from 'vue' import { Button } from 'element-ui' //引入Button按钮 export default ()=>{
Vue.use(Button)
}

第二步,引入插件

nuxt.config.js中,添加配置为:plugins


css:[
'element-ui/lib/theme-chalk/index.css'
],
plugins:[
'~/plugins/element-ui'
]

默认为:开启SSR,采用服务端渲染,也可以手动配置关闭SSR,配置为:


css:[
'element-ui/lib/theme-chalk/index.css'
],
plugins:[
{
src:'~/plugins/element-ui',
ssr:false //关闭ssr
}
]

第三步,配置babel选项

nuxt.config.js中,配置在build选项中,规则为官网规则:


build: {
babel:{ //配置按需引入规则
"plugins":[
[
"component",
{
"libraryName":"element-ui",
"styleLibraryName":"theme-chalk"
}
]
]
},
/*
** Run ESLINT on save
*/
extend (config, ctx) {
if (ctx.isClient) {
config.module.rules.push({
enforce: 'pre',
test: /\.(js|vue)$/,
loader: 'eslint-loader',
exclude: /(node_modules)/
})
}
}
}

此时,我们在观察打包以后文件体积大小,如图:

此时,我们成功完成了按需引入配置。


3.初始化脚手架的选择:

官网提供的初始化脚手架为:


# 基本的Nuxt.js项目模板 vue init nuxt/starter template

而其实,官方也提供了更多的模板以便于我们使用,而我在中文文档并未发现有说明:

  • nuxt/starter 基本的Nuxt.js项目模板
  • nuxt/express Nuxt.js + Express
  • nuxt/koa Nuxt.js + Koa2
  • nuxt/adonuxt Nuxt.js + AdonisJS
  • nuxt/micro Nuxt.js + Micro
  • nuxt/nuxtent 适用于内容较重网站的Nuxt.js + Nuxtent模块

而我们使用基础的模板进行初始化项目,部署方式为:

第一步,打包:

在执行npm run build的时候,nuxt会自动打包

第二步,选择要部署的文件:

  • .nuxt文件夹
  • package.json 文件
  • nuxt.config.js 文件(如果你部署一些proxy,则需要上传这个文件,个人建议把它传上去)

第三步,启动你的nuxt(重要)

使用pm2启动你的nuxt.js


pm2 start npm --name "demo" -- run start

在这里,我发现个问题,如果你使用window server 服务器,在使用pm2启动时候,会出现错误,错误如下:

如果在Linux服务器下启动,同样的命令,同样的执行,则不会出现错误:

这里采用Linux CentOS 7

所以,个人建议,在采用初始化模板的时候,请选用express 或者 koa 进行初始化,理由如下:

1.采用基础模板初始化,观察package.json的启动方式如下:

"scripts": {
"dev": "nuxt",
"build": "nuxt build",
"start": "nuxt start",
"generate": "nuxt generate",
"lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
"precommit": "npm run lint"
}
2.采用express/koa初始化模板,观察package.json的启动方式如下:

"scripts": {
"dev": "backpack dev",
"build": "nuxt build && backpack build",
"start": "cross-env NODE_ENV=production node build/main.js",
"precommit": "npm run lint",
"lint": "eslint --ext .js,.vue --ignore-path .gitignore ."
}
start中,对比下,个人觉得express/koa更灵活一些,它直接启动了build/main.js文件,更能直观的启动方式,而关键在于,也可以在windows server下运行起来。

注意事项:如果采用express/koa的模板初始化,服务器部署的时候,同时要上传build/目录!!!


4.插件中获取vue绑定

我们需要在axios的插件中配置Loading加载效果,例如使用element-ui框架作为示例:

1.创建插件

在文件根目录创建(或已经存在)plugins/目录,创建名为:axios.js的文件,内容如下:


import Vue from 'vue' var vm = new Vue({}) //获取vue实例 export default function ({ $axios, redirect }) { $axios.onRequest(config => {
if (process.browser) { //判断是否为客户端(必须)
vm.$loading();
}
}) $axios.onResponse(response=>{
if (process.browser) { //判断是否为客户端(必须)
let load = vm.$loading();
load.close();
}
}) $axios.onError(error => {
const code = parseInt(error.response && error.response.status)
if (code === 400) {
redirect('/400')
}
})
}

如官方所说,并不需要像原生axios一样,去return一个config出来。

2.配置nuxt.config.js文件

plugins选项添加:


plugins:['~/plugins/axios']

添加modules选项并添加如下示例:


modules:['@nuxtjs/axios']

配置防止多次打包:

在build选项中(nuxt.config.js会默认配置)添加vendor配置项:


build:{
vendor:['axios']
}

这样就可以调用loading加载方法,并且愉快的使用了。

(当然还有其他的方法去调用vue实例,每个人习惯不同,使用方式不同。)


5.Nuxt.js中配置代理解决跨域

我们知道在vue-cli中配置代理很方便,只需要在config/目录下的index.js中找到proxyTable添加即可,而在nuxt中同样需要修改nuxt.config.js配置文件。

1.原始配置代理方式

使用@nuxtjs/axios@nuxtjs/proxy进行代理解决跨域

1).下载插件

# 下载插件 npm install @nuxtjs/axios @nuxtjs/proxy --save
2).配置插件

nuxt.config.js添加配置项:modulesproxy


export default = { modules:[
'@nuxtjs/axios',
'@nuxtjs/proxy'
],
proxy:[
['/json.html',{target:'http://www.xxxx.com'}] //注意这也是一个数组
] }

按照上面的方式已经完成了代理,可以进行跨域请求了。

2.第二种方式的代理配置

1).下载插件

这次只需要下载@nuxtjs/axios插件就可以。


# 下载插件 npm install @nuxtjs/axios --save
2).配置插件

module.exports = { modules: [
'@nuxtjs/axios',
],
axios: {
proxy:true
},
proxy:{
'/api': 'http://api.example.com',
'/api2': 'http://api.another-website.com'
} }

特别注意:此时,axios选项为对象(object),proxy选项为对象(object)。


@nuxtjs/axios的配置项


pathRewrite选项(重写地址)

如果配置pathRewrite选项,可以采用第二种写法如下:



proxy: {

  '/api/': { target: 'http://api.example.com', pathRewrite: {'^/api/': ''} }

 }

/api/将被添加到API端点的所有请求中。可以使用pathRewrite选项删除。

因为在 ajax 的 url 中加了前缀 /api,而原本的接口是没有这个前缀的。

所以需要通过 pathRewrite 来重写地址,将前缀 /api 转为 /或者是''

如果本身的接口地址就有 /api 这种通用前缀,就可以把 pathRewrite 删掉。


retry选项(自动拦截失败请求)

可以在axios选项中,配置retry配置项,自动拦截失败请求,默认为3次。


axios: {
retry: { retries: 3 }
}

progress选项(发出请求时显示加载栏)

Nuxt.js进度条集成,在发出请求时显示加载栏。(仅在浏览器上,当加载栏可用时。)

您还可以使用progress配置为每个请求禁用进度条。


this.$axios.$get('URL', { progress: false })

baseURL选项(服务器端默认请求地址)

在服务器端使用和预先创建请求的基本URL。


browserBaseURL选项(客户端默认请求地址)

在客户端使用和预先创建请求的基本URL。


本文同步更新在个人博客中,?点击跳转
本文如果有错误之处,请在下方留言以便于及时更正,谢谢!

本文转载于:Nuxt.js的踩坑指南(常见问题汇总)

Nuxt.js的踩坑指南(常见问题汇总)的更多相关文章

  1. nuxt.js实战踩坑记录

    读万卷书不如行万里路,必须实践出真理! 看官方文档安装项目vue init nuxt-community/starter-template <project-name>注意:这是新手项目不 ...

  2. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  3. 树莓派4B踩坑指南 - (15)搭建在线python IDE

    今天想在树莓派上自己搭一个在线的python IDE,于是找到了一篇教程--Fred913大神的从头开始制作OJ-在线IDE的搭建 自己尝试动手做了一下, 还是发现不少细节需要注意, 记录在此 如果不 ...

  4. Taro 开发踩坑指南 (小程序,H5, RN)

    Taro 开发踩坑指南 (小程序,H5, RN) css taro 如何展示多行文本省略号 https://www.cnblogs.com/xgqfrms/p/12569057.html UI 设计稿 ...

  5. 小程序 & taro 踩坑指南

    小程序 & taro 踩坑指南 微信开发者工具, 不支持 react bug https://github.com/NervJS/taro/issues/5042 solution just ...

  6. Spring WebSocket踩坑指南

    Spring WebSocket踩坑指南 本次公司项目中需要在后台与安卓App间建立一个长连接,这里采用了Spring的WebSocket,协议为Stomp. 关于Stomp协议这里就不多介绍了,网上 ...

  7. 正则表达式 test 踩坑指南

    正则表达式 test 踩坑指南 test 只能使用一次,第二次返回的是错误结果! reg = /edg|edge/g; /edg|edge/g reg.test(`edg`) true reg.tes ...

  8. Java 热更新 Groovy 实践及踩坑指南

    Groovy 是什么? Apache的Groovy是Java平台上设计的面向对象编程语言.这门动态语言拥有类似Python.Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用 ...

  9. 『OGG 02』Win7 配置 Oracle GoldenGate Adapter Java 踩坑指南

    上一文章 <__Win7 配置OGG(Oracle GoldenGate).docx>定下了 两个目标: 目标1: 给安装的Oracle_11g 创建 两个用户 admin 和 root ...

随机推荐

  1. python 中的迭代器和生成器简单介绍

    可迭代对象和迭代器 迭代(iterate)意味着重复,就像 for 循环迭代序列和字典那样,但实际上也可使用 for 循环迭代其他对象:实现了方法 __iter__ 的对象(迭代器协议的基础). __ ...

  2. CSDN中Markdown编辑器使用方法

    Markdown编辑器 如果想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识. 新的改变 CSDN中Markdown编辑器进行了一些功能拓展与语法支 ...

  3. MaRVIN

    [ResourceRegistration] 加给Resource类 [ResourceReference(--)] 加给Resource类中引动到的Resource类,引用多个的话用IReferen ...

  4. 《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)

    1.简介 上一篇文章中,从TestNg的特点我们知道支持变量,那么我们这一篇就通过变量参数来启动不同的浏览器进行自动化测试.那么如何实现同时启动不同的浏览器对脚本进行测试,且听宏哥娓娓道来. 2.项目 ...

  5. 2021-08-02(console、comfrim)

    1.console对象 1.输出信息: console.info()别名 console.log(); 2.复合类型表格展示 console.table(obj) || console.table(A ...

  6. 输入URL到页面加载过程

    URL(uniform resource location) : 统一资源定位符,用来作为互联网上各种资源的标识符,可理解为身份证号 . 注意点:浏览器为了保证安全性,设定了跨域保护策略, 即窗口之间 ...

  7. c++ 11 线程池---完全使用c++ 11新特性

    前言: 目前网上的c++线程池资源多是使用老版本或者使用系统接口实现,使用c++ 11新特性的不多,最近研究了一下,实现一个简单版本,可实现任意任意参数函数的调用以及获得返回值. 0 前置知识 首先介 ...

  8. 一文详解Redis键过期策略

    摘要:Redis采用的过期策略:惰性删除+定期删除. 本文分享自华为云社区<Redis键过期策略详解>,作者:JavaEdge. 1 设置带过期时间的 key # 时间复杂度:O(1),最 ...

  9. 监督学习,无监督学习常用算法集合总结,引用scikit-learn库(监督篇)

    why写这篇blog 最近在接触这方面的知识,但是找了许多的笔记,都感觉没有很好的总结出来,也正好当做是边学习,边复习着走.大佬轻喷.参考书目<python机器学习基础教程> 将分别从以下 ...

  10. emu8086实现两位数乘法运算

    题目说明:从键盘上输入任意两个不大于2位数的正实数,计算其乘积,结果在屏幕上显示 一.准备材料 DOS功能调用表:https://blog.csdn.net/mybelief321/article/d ...