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

Nuxt使用drawflow库报错Class constructor i cannot be invoked without 'new'如何解决

报错原因
  • 核心原因1:drawflow本身不是Vue插件,代码中调用Vue.use(Drawflow)属于错误用法,会触发类直接调用的逻辑
  • 核心原因2:Nuxt服务端渲染模式下,drawflow作为仅支持客户端运行的库,在服务端被加载时会触发转译异常,ES6类没有被正确处理,导致调用时提示需要用new关键字
  • 额外原因:drawflow的dist编译产物是UMD格式,和Nuxt默认的Babel转译规则存在兼容性冲突
解决方案

步骤1:修改Vue组件代码

替换原有组件的代码如下:

<template>
  <div class="container-fluid">
    <div class="row">
      <div class="col-sm-12">
        <h1>Drawflow</h1>
        <div id="drawflow" ref="drawflow" />
      </div>
    </div>
  </div>
</template>

<script>
import Vue from 'vue'
// 移除错误的Vue.use(Drawflow)代码

export default {
  name: 'App',
  data () {
    return {
      editor: null
    }
  },
  async mounted () {
    // 仅在客户端侧加载drawflow
    if(process.client) {
      const Drawflow = (await import('drawflow/src/Drawflow')).default
      // 直接用$refs获取dom,更符合Vue用法
      const drawflowDom = this.$refs.drawflow
      this.editor = new Drawflow(drawflowDom, Vue, this)
      this.editor.start()
    }
  }
}
</script>

<style>
    @import 'drawflow/dist/drawflow.min.css';
</style>

步骤2:校验nuxt.config.js配置

你已经在build的transpile中添加了drawflow,这个配置保留即可,不需要修改。

步骤3:备用方案(上述修改仍报错时使用)

如果执行完前两步还有相同报错,可通过客户端插件全局注册drawflow:

  1. 新建plugins/drawflow.client.js文件,内容如下:
import Vue from 'vue'
import Drawflow from 'drawflow/src/Drawflow'
Vue.prototype.$Drawflow = Drawflow
  1. 组件中直接调用挂载到原型上的Drawflow即可:
mounted() {
  this.editor = new this.$Drawflow(this.$refs.drawflow, Vue, this)
  this.editor.start()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:36:04