nuxtjs在vue组件中使用window对象编译报错的解决方法
我们知道nuxtjs是做服务端渲染的,他有很多声明周期是运行在服务端的,以及正常的vue声明周期mounted之前均是在服务端运行的,那么服务端是没有比如window对象的location、navagitor等,以及H5的FormData()方法,所以当你在created之前使用这些时,会报错,那么如何处理呢?
1、自己的写的函数里包含window等
因为nuxt为SSR框架,所以其编译打包时会区分服务端渲染还是客户端渲染(即浏览器),在vue文件中使用window对象报错的原因是,webpack将其加入了服务端脚本中,所以会报错。所以在使用时,应该判断当前代码环境是否是浏览器环境。
官方给出的:process.browser
,通过判断再使用window对象
beforeCreate() {
if (process.browser) {
...
}
},
但是这样有个不好的是,如果判断某个是不是微信浏览器,你通过这种判断那在服务端肯定会一直返回false,到了客服端又不能重置,所以会导致判断出错,所以不是比较好的方法。
最终的解决方案是:将涉及window对象、FormData()等的时候放至mounted生命周期里。
2、第三方插件里包含window等
还有一种就是项目里会引入很多第三方组件,这些组件里也有可能会包含window等一些服务端不支持的内容。
比如我们使用vue-messages第三方组件,引入过后页面报错window is not defined,如何解决这个问题
安装&配置:yarn add vue-messages
plugins目录下放该组件装载文件vue-messages.js
,内容如下:
import Vue from 'vue'
import VueMessage from 'vue-messages'
Vue.use(VueMessage)
将vue-messages.js
文件路径配置到nuxt.config.js
的plugins
属性中,示例如下
module.exports = {
//其它配置项...
plugins: [
{ src: '~/plugins/vue-messages' }
],
//其它配置项...
}
以上就是组件的安装和配置步骤。这几步过后就出现了window is not defined问题。
分析:由于Nuxt是在服务端做的页面渲染,我们引入的很多第三方组件需要用到window对象,而window是浏览器对象,是要依赖浏览器的,所以在做服务端渲染时会遇到window is not defined问题。
遇到这种问题我们如何解决呢?
还好Nuxt提供了解决办法,那就是在plugins配置第三方组件的时候加上ssr: false
属性即可,示例如下:
plugins: [
{ src: '~/plugins/vue-messages' ,ssr: false }
],
ssr设置为false
就是告诉引擎该组件只在客户端引入,不做服务端渲染。
nuxtjs在vue组件中使用window对象编译报错的解决方法的更多相关文章
- vue.js 中使用(...)运算符报错的解决方法
vue.js 中使用(...)运算符报错的解决方法 Syntax Error:Unexpected token(XX:X) }, computed:{ ...mapGetters([ 'pageSiz ...
- MySQL中遇到的几种报错及其解决方法
MySQL中遇到的几种报错及其解决方法 1.[Err] 1064 - You have an error in your SQL syntax; check the manual that corre ...
- vue项目初始化时npm run dev报错webpack-dev-server解决方法
vue项目初始化时npm run dev报错webpack-dev-server解决方法 原因:这是新版webpack存在的BUG,卸载现有的新版本webpack,装老版本就好webpack-dev- ...
- IDEA导入maven中导入net.sf.json报错的解决方法
使用IDEA搭建Maven项目导入架包时, 添加net.sf.json的jar包的时候,代码如下: 在pom.xml文件时: <dependency> <groupId>net ...
- Vue 项目在其他电脑 npm run dev 运行报错的解决方法
一个 Vue 项目从一台电脑上传到 github 上之后,再另外一台电脑上 git clone .并使用 npm run dev 或 npm run start 发生以下报错的解决方法. 报错原因 ...
- 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法
如何自定义JSTL标签 1.创建一个类,从SimpleTagSupport继承 A) 通过继承可以获得当前JSP页面上的对象,如JspContext I) 实际上可以强转为PageContext II ...
- 关于vue,webpack 中 “exports is not defined”报错
vue项目npm run dev 后项目报错 : 提示 “exports is not defined”. 导致这个问题是因为balbel的配置文件.babelrc的问题: { "prese ...
- android 程序中res/values-v14/styles.xml报错的解决办法
从旧的ADT迁移的新的ADT时, android 程序中res/values-v14/styles.xml报错: error: Error retrieving parent for item: No ...
- Vue项目中出现Loading chunk {n} failed问题的解决方法
最近有个Vue项目中会偶尔出现Loading chunk {n} failed的报错,报错来自于webpack进行code spilt之后某些bundle文件lazy loading失败.但是这个问题 ...
随机推荐
- mysql 中的日期格式。date_format( ) 转换格式
date_format( ) 转换格式 : 格式 描述 %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) ...
- Ubuntu18.04 配置网卡、替换软件源
2019/10/29, Ubuntu Server 18.04 摘要:Ubuntu Server 18.04 采用netplan作为网络配置管理,修改IP使其连上网络,修改替换软件源 修改网卡配置 首 ...
- 一张图看懂SharpSocket
SharpSocket提供了很多接口和类,他们被良好地组织在一起,通过下面的图片,可以瞬间看懂整个类库的脉络.通过调用各个接口的方法,完成socket通信的功能.
- swiper4基础
这段时间在公司实习做前端,感觉前端没学习到很多前端框架,接口那些都是写好的,只需要调用就好,感觉没什么好记的,唯一觉得有必要记的就是swiper轮播了,在前端做网站的时候经常用到swiper做公告,图 ...
- pytest之mark功能
pytest系列(一)中给大家介绍了pytest的特性,以及它的编写用例的简单至极. 那么在实际工作当中呢,我们要写的自动化用例会比较多,不会都放在一个py文件里. 如下图所示,我们编写的用例存放在不 ...
- UIPath RPA 自动化脚本 机器人从入门到精通
本文链接:https://blog.csdn.net/qq_27256783/article/details/93619818 一.UiPath介绍 UiPath 是RPA(Robotic Proce ...
- 关于vscode自动跳转回车的解决方法(关闭vscode自动保存功能;可能和其他插件有冲突)
关于vscode自动跳转回车的解决方法(关闭vscode自动保存功能:可能和其他插件有冲突)
- jQuery选择器与过滤器(二)
一.jQuery选择器1.基本选择器:所有选择器 *标签选择器 标签名ID选择器 #ID类选择器 .className组合选择器 selector1,selector2 ...
- css 平行四边形
平行四边形 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- linux 如何修改默认的FTP帐号或密码
wdlinux_lamp,wdlinux_lnmp的系统安装好后,默会创建一个FTP用户用户名是:wdlinux密码是:wdlinux.cn 如想修改密码或用户名,先找个ssh工具,有关ssh客户端的 ...