求助:在支持Node.js的A2共享主机部署SvelteKit应用
解决A2共享主机cPanel/SSH部署SvelteKit应用的两个问题
问题1:cPanel「设置Node.js应用」提示vite不存在
- 原因:cPanel的Node.js应用部署工具默认仅安装
package.json内dependencies中的生产依赖,vite属于devDependencies,不会被自动安装。 - 解决方法:
- 本地预构建后上传:在本地项目执行
npm run build完成构建,仅上传构建后的build目录、包含完整生产依赖的package.json和package-lock.json到主机,再通过cPanel配置Node.js应用,此时无需vite参与运行。 - SSH手动安装全量依赖:若需在主机上构建,通过SSH连接主机进入项目目录,执行
npm install(不要加--production参数)安装所有依赖(含devDependencies),再执行构建命令。
- 本地预构建后上传:在本地项目执行
问题2:adapter-node构建后运行出现require is not defined错误
- 原因:你的
package.json设置了"type": "module",但adapter-node默认生成的index.js是CommonJS格式(使用require语法),Node.js会将.js文件当作ES模块处理,引发语法冲突。 - 解决方法(三选一即可):
- 重命名入口文件:将构建生成的
index.js改名为index.cjs,同步更新启动命令为node index.cjs(在cPanel的Node.js应用设置中修改,或通过SSH执行该命令)。 - 修改package.json模块类型:删除
package.json中的"type": "module",或改为"type": "commonjs",让Node.js将.js文件识别为CommonJS模块。 - 配置adapter-node生成ES模块:在
svelte.config.js中修改adapter-node配置,指定输出格式为ES模块:
重新构建后,生成的入口文件会使用import adapter from '@sveltejs/adapter-node'; export default { kit: { adapter: adapter({ format: 'esm' }) } };import语法,与"type": "module"兼容。
- 重命名入口文件:将构建生成的
内容的提问来源于stack exchange,提问作者Arun Kumar
相关产品推荐
相关产品推荐

