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

如何修改JS构建流程修复Svelte项目的模块导入语法错误

问题:Svelte项目构建@capacitor-community/apple-sign-in时出现SyntaxError: Cannot use import statement outside a module

复现步骤

  • 执行 npm create svelte@latest my-app 初始化项目
  • 进入项目目录:cd my-app
  • 安装基础依赖:npm install
  • 安装Apple登录插件:npm i @capacitor-community/apple-sign-in
  • 在src/routes/Header.svelte中添加该库的调用代码
  • 执行构建命令 npm run build,触发错误

错误详情

SyntaxError: Cannot use import statement outside a module

该插件在create-react-app项目中可正常运行,推测是Svelte项目默认Vite构建流程的模块处理逻辑导致此问题。


解决方案

方案1:修改Vite SSR配置(推荐)

由于Capacitor插件仅适用于客户端环境,且该库采用ES模块编写,在SSR构建阶段Node环境无法正确解析,需将其排除在SSR外部:

在项目根目录的vite.config.js(或vite.config.ts)中添加如下配置:

import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';

export default defineConfig({
	plugins: [sveltekit()],
	ssr: {
		noExternal: ['@capacitor-community/apple-sign-in']
	},
	optimizeDeps: {
		include: ['@capacitor-community/apple-sign-in']
	}
});

方案2:使用Babel转换模块

若方案1无效,可通过Babel将插件代码转换为Node兼容的CommonJS格式:

  1. 安装依赖:
npm install @babel/core @babel/preset-env vite-plugin-babel --save-dev
  1. 修改vite.config.js:
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import babel from 'vite-plugin-babel';

export default defineConfig({
	plugins: [
		sveltekit(),
		babel({
			babelrc: false,
			presets: [['@babel/preset-env', { targets: { node: 'current' } }]],
			include: ['node_modules/@capacitor-community/apple-sign-in/**/*']
		})
	]
});

方案3:确保仅在客户端加载插件

在Svelte组件中,通过判断浏览器环境延迟加载插件,避免SSR阶段执行模块导入:

<script>
	let appleSignIn;

	if (typeof window !== 'undefined') {
		import('@capacitor-community/apple-sign-in').then(module => {
			appleSignIn = module.AppleSignIn;
		});
	}

	async function handleSignIn() {
		if (appleSignIn) {
			const result = await appleSignIn.signIn();
			// 处理登录结果
		}
	}
</script>

<button on:click={handleSignIn}>Apple 登录</button>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:12:53