Vite SSR生产启动报错:JSON模块导入相关问题求助
Vite SSR生产环境启动JSON文件导入错误解决方案
问题原因
在ESM模块(.mjs)中,Node.js默认禁止直接导入JSON文件,生产环境执行serve命令时,导入dist/client/ssr-manifest.json触发了模块导入限制,引发ERR_UNKNOWN_FILE_EXTENSION或ERR_IMPORT_ASSERTION_TYPE_MISSING错误。
方法1:使用导入断言(Node.js 17.1+/16.14+)
- 修改
server.mjs中的JSON导入代码,添加导入断言:
// 替换原导入语句 import manifest from './dist/client/ssr-manifest.json' assert { type: "json" };
- 更新
package.json中的serve命令,保留实验性参数:
"serve": "cross-env NODE_ENV=production node --experimental-json-modules server.mjs"
方法2:用fs模块读取解析JSON(无版本限制)
通过Node.js内置的fs模块读取文件并手动解析,绕过ESM的JSON导入限制:
// 替换server.mjs中的JSON导入代码 import { readFileSync } from 'fs'; import { resolve } from 'path'; const manifestPath = resolve(__dirname, './dist/client/ssr-manifest.json'); const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
无需修改serve命令,直接执行原命令即可:
"serve": "cross-env NODE_ENV=production node server.mjs"
注意事项
- 方法1依赖Node.js实验性特性,适合愿意使用新特性的场景;
- 方法2兼容性更强,是生产环境的稳妥选择。
内容的提问来源于stack exchange,提问作者Awais Alwaisy
相关产品推荐
相关产品推荐

