代码之家  ›  专栏  ›  技术社区  ›  noblerare

Vite错误-未定义导出(SSR)

  •  0
  • noblerare  · 技术社区  · 5 月前

    我正试图从webpack迁移到vite。

    以下是相关文件:

    vite.config.ts

    import { defineConfig } from 'vite'
    import { VitePluginNode } from 'vite-plugin-node'
    import babel from 'vite-plugin-babel';
    import commonjs from 'vite-plugin-commonjs'
    
    export default defineConfig({
        server: {
            port: 3001,
        },
        build: {
            target: 'esnext',
            commonjsOptions: { transformMixedEsModules: true }
        },
        plugins: [
            commonjs(),
            babel(),
            ...VitePluginNode({
                adapter: 'express',
                appPath: 'some/path/server',
                exportName: 'app',
                tsCompiler: 'esbuild',
            }),
        ],
    })
    

    tsconfig.json

    {
        "compilerOptions": {
            "target": "esnext",
            "module": "commonjs", // have also tried "esnext"
            "lib": ["es7", "es2015", "es2017", "dom", "esnext"],
            "moduleResolution": "node", // have also tried "bundler"
            "esModuleInterop": true,
        }
    }
    

    运行开发服务器时,我得到:

    [vite] (ssr) Error when evaluating SSR module some/path/server:
    |- ReferenceError: exports is not defined
        at eval (/path/to/some/file/some-file.js:5:23)
    

    它抱怨的相关文件实际上只是:

    export * from 'isomorphicSecrets'
    

    任何帮助都将不胜感激。

    1 回复  |  直到 5 月前
        1
  •  1
  •   Rushil Mahadevu    5 月前

    错误 exports is not defined 发生这种情况是因为Vite需要ES模块,但您的代码或依赖项使用的是CommonJS。以下是修复方法:

    1. 更新 tsconfig.json :

      {
        "compilerOptions": {
          "target": "esnext",
          "module": "esnext", // Use ES modules
          "moduleResolution": "node",
          "esModuleInterop": true
        }
      }
      
    2. 更改 vite-plugin-commonjs 正在转换CommonJS模块 :

      import { defineConfig } from 'vite';
      import { VitePluginNode } from 'vite-plugin-node';
      import commonjs from 'vite-plugin-commonjs';
      
      export default defineConfig({
        server: { port: 3001 },
        build: { target: 'esnext' },
        plugins: [
          commonjs(), // Transform CommonJS to ES modules
          ...VitePluginNode({
            adapter: 'express',
            appPath: 'some/path/server',
            exportName: 'app',
            tsCompiler: 'esbuild',
          }),
        ],
      });
      
    3. 检查有问题的模块 : 确保 isomorphicSecrets 是ES模块或正在被转换 vite插件commonjs .