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

Vite构建SolidJS SPA时生成独立测试脚本遇ES模块问题

解决Vite打包Node可执行独立脚本的问题

你的问题出在未针对Node环境配置Rollup的打包格式,默认打包的ES模块无法被Node直接识别(即使修改package.json或扩展名,也可能因为Solid插件的前端转换规则导致冲突)。要生成能直接用Node运行的独立脚本,需要调整Rollup的多输出配置,区分浏览器入口和Node入口:

修改vite.config.ts配置

import { defineConfig } from 'vite'
import solidPlugin from 'vite-plugin-solid'

export default defineConfig({
  plugins: [
    solidPlugin({
      // 若test.ts是纯Node脚本(无需Solid前端转换),排除该文件
      exclude: /test\.ts$/
    })
  ],
  server: {
    port: 3000,
  },
  build: {
    target: 'esnext',
    outDir: '../htdocs',
    rollupOptions: {
      input: {
        index: "./index.html",
        dev: "./dev.html",
        test: "./test.ts",
      },
      // 多输出配置:分别处理浏览器和Node入口
      output: [
        // 浏览器入口配置(保持原有逻辑)
        {
          entryFileNames: `assets/[name].js`,
          chunkFileNames: `assets/[name].js`,
          assetFileNames: `assets/[name].[ext]`,
          format: 'esm',
          dir: '../htdocs'
        },
        // Node入口配置(test.ts专属)
        {
          entryFileNames: `assets/test.js`,
          format: 'cjs', // 打包为CommonJS格式,Node可直接运行
          dir: '../htdocs',
          external: [], // 强制打包所有依赖,生成独立可执行文件
          preserveModules: false // 合并为单个文件
        }
      ],
      preserveEntrySignatures: 'allow-extension'
    },
  },
});

关键配置说明

  1. 多输出格式区分:通过output数组分别配置浏览器(ES模块)和Node(CommonJS)的打包规则,避免环境冲突。
  2. Solid插件排除:如果test.ts是纯Node脚本,无需Solid的前端编译,用exclude跳过转换,减少不必要的代码处理。
  3. 强制打包所有依赖:设置external: []让Rollup把所有依赖(包括node_modules)都打包进test.js,生成完全独立的可执行文件。
  4. CommonJS格式:用format: 'cjs'打包,Node无需额外配置(如type:module)即可直接运行。

验证

执行vite build后,运行node ../htdocs/assets/test.js,脚本会直接执行,若运行失败可直接阻断部署流程。

如果你的test.ts需要引用SolidJS代码,只需移除solidPlugin中的exclude配置,Rollup会自动将Solid的代码打包为Node兼容的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:25:39