You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt.js项目使用vue2-editor刷新报document is not defined错误如何解决

问题原因

Nuxt.js 默认开启服务端渲染(SSR),vue2-editor 依赖浏览器端的 document 对象,你在页面顶层直接导入组件时,服务端渲染阶段就会加载执行相关代码,而服务端不存在 document 对象,因此刷新页面(触发服务端渲染)时就会抛出对应错误。你添加的 <client-only> 标签只能保证组件不在服务端渲染,无法阻止顶层导入的代码在服务端执行。


解决方案

方案1(推荐):移除页面内的主动导入

你已经在 nuxt.config.js 的 modules 中添加了 vue2-editor/nuxt,该配置会自动完成客户端侧的组件全局注册,你不需要在页面中手动导入和注册 VueEditor,直接删除 script 中对应的导入和注册代码即可:

// 删除以下两行代码
// import { VueEditor } from 'vue2-editor';
// 以及 components 配置项里的 VueEditor 注册逻辑

修改后你的页面 script 代码如下:

import SideBar from '../components/SideBar';
export default {
  name: 'Articles',
  components: {
    SideBar
  },
  data() {
    return {
      articleContent: null,
    }
  },
  methods: {
    postArticle() {
      console.log(this.articleContent)
    },
  },
}

原有模板代码无需改动,保留 <client-only> 标签即可。


方案2:使用动态异步导入

如果你不想通过 modules 全局注册组件,也可以将组件改为客户端侧动态导入,移除顶层的 VueEditor 导入语句,修改 components 注册逻辑即可:

import SideBar from '../components/SideBar';
export default {
  name: 'Articles',
  components: {
    SideBar,
    // 仅在客户端环境动态导入组件
    VueEditor: process.client ? () => import('vue2-editor').then(m => m.VueEditor) : {}
  },
  data() {
    return {
      articleContent: null,
    }
  },
  methods: {
    postArticle() {
      console.log(this.articleContent)
    },
  },
}

内容的提问来源于stack exchange,提问作者dokichan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:36:03