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

使用InertiaJS运行SSR服务器时遇模块兼容错误求助

Inertia SSR 搭建失败问题

按照步骤搭建Inertia SSR应用但未成功,相关配置、代码及错误信息如下:

配置文件 config/inertia.ts

export const inertia: InertiaConfig = {
  view: 'app',
  ssr: {
    enabled: true,
    autoreload: process.env.NODE_ENV === 'development'
  },
};

资源文件 resources/js/ssr.js

import { createSSRApp, h } from 'vue';
import { renderToString } from '@vue/server-renderer';
import {createInertiaApp, Link} from '@inertiajs/vue3';

export default function render(page) {
  return createInertiaApp({
    page,
    render: renderToString,
    resolve: (name) => require(`./Pages/${name}`),
    setup({ app, props, plugin }) {
      return createSSRApp({
        render: () => h(app, props),
      }).use(plugin).component('inertia-link', Link);
    },
  });
}

执行命令

node ace serve --watch
node ace ssr:watch

错误信息

require() 无法加载 ES Module 文件 C:\Users\Projeto\node_modules@inertiajs\vue3\dist\index.js(来自 C:\Users\Projeto\inertia\ssr\ssr.js)。该 index.js 被识别为 ES Module,因为它所在目录的最近 package.json 中包含 "type": "module",这会将该包范围内的所有 .js 文件都视为 ES Module。

可选解决方向:

  • 将 index.js 重命名为 .cjs 后缀
  • 修改调用代码,使用动态 import()(所有 CommonJS 模块都支持该方式)
  • 将 C:\Users\Projeto\node_modules@inertiajs\vue3\package.json 中的 "type": "module" 改为 "type": "commonjs",将所有 .js 文件视为 CommonJS(同时用 .mjs 后缀标识 ES Module)

修复方案

优先推荐:替换同步 require 为动态 import

修改 resources/js/ssr.js 里的 resolve 函数,把同步的 require 换成 ES Module 支持的动态 import:

resolve: (name) => import(`./Pages/${name}`),

注意 createInertiaApp 会返回 Promise,确保渲染逻辑能正确处理异步流程。

不推荐修改第三方依赖

不要直接修改 node_modules 内的第三方包配置,依赖更新后修改会被覆盖,维护成本高。

调整项目模块类型(备选)

如果项目整体基于 CommonJS,可在项目根目录的 package.json 中设置 "type": "commonjs",但这种方式可能影响其他 ES Module 类型的依赖,需谨慎测试。

内容的提问来源于stack exchange,提问作者marcelo.delta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:55:03