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

NextJS导入动画插件触发Unexpected token 'export'错误怎么解决

问题原因

这个报错的核心是luge插件仅发布了ES Module版本,而Next.js服务端渲染阶段默认在Node.js环境执行代码,Node.js默认无法直接识别node_modules下第三方包的ES Module export语法。同时luge强依赖浏览器DOM API,本身不支持在服务端环境运行。

可尝试的修复方案
  • 方案1:使用动态导入禁用服务端渲染(最简便,推荐)
    直接避免在服务端加载luge相关代码,仅在客户端环境导入执行,示例代码如下:
// 页面组件顶部直接导入样式,CSS不受SSR影响
import '@waaark/luge/dist/css/luge.min.css'
import { useEffect } from 'react'

export default function Home() {
  useEffect(() => {
    // 仅在客户端环境动态导入luge
    const initLuge = async () => {
      const luge = (await import('@waaark/luge')).default
      luge.init()
    }
    initLuge()
  }, [])

  // 你的页面内容
  return <div></div>
}

如果是组件形式引入,也可以用next/dynamic配置ssr: false包裹相关组件。

  • 方案2:配置next.config.js转译luge包
    如果需要提前导入luge相关API,可以在Next.js配置中添加transpilePackages配置,让编译工具转译luge的ES Module语法适配Node环境:
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  // 将luge加入转译列表
  transpilePackages: ['@waaark/luge']
}

module.exports = nextConfig

配置完成后重启项目,就可以正常在顶部导入luge,注意初始化逻辑依然要放在useEffect中,避免服务端调用浏览器API报错。

  • 方案3:自定义Babel配置兜底
    如果使用的是旧版本Next.js不支持transpilePackages属性,可以自定义.babelrc文件,配置babel转译luge包:
{
  "presets": ["next/babel"],
  "overrides": [
    {
      "include": ["./node_modules/@waaark/luge"],
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
  ]
}

需要先安装@babel/plugin-transform-modules-commonjs作为开发依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:15:05