Svelte部署报错:如何向build.rollupOptions.external添加模块
报错根因
你用的是SvelteKit架构,构建流程由Vite调度Rollup完成,项目根目录的rollup.config.js是旧版非Kit Svelte的配置文件,SvelteKit构建时完全不会读取,改这个文件没有任何作用。
报错本质是Vite无法匹配你写的深层导入路径,优先修正导入写法即可解决,不推荐上来就加external配置——external会把对应模块完全排除在构建产物外,需要手动引入CDN资源才能正常运行,属于兜底方案。
解决步骤
1. 修正组件导入语句
把SearchSection.svelte里的导入代码改成官方推荐的ESM导入写法,去掉冗余后缀和错误路径,绝大多数情况改完就能解决:
import algoliasearch from 'algoliasearch/lite'; import instantsearch from 'instantsearch.js'; import { searchBox, hits, index } from 'instantsearch.js/es/widgets';
2. 兜底方案:添加Rollup external配置
如果改完导入仍然报相同错误,再修改svelte.config.js,在kit.vite节点下添加Rollup构建配置,配置位置如下:
const config = { preprocess, kit: { adapter: adapterStatic(), target: "#svelte", vite: { resolve: { alias: { // 原有别名配置保持不变 $actions: path.resolve("./src/actions"), $components: path.resolve("./src/components"), $data: path.resolve("./src/data"), $stores: path.resolve("./src/stores"), $styles: path.resolve("./src/styles"), $svg: path.resolve("./src/svg"), $utils: path.resolve("./src/utils") } }, plugins: [dsv(), svg()], // 新增以下配置块 build: { rollupOptions: { external: ['instantsearch.js/es/widgets.js'] } } // 新增配置块结束 }, paths: { base } } };
注意:如果使用了external配置,必须在
src/app.html中手动引入对应版本的instantsearch.js CDN脚本,否则页面运行时会报模块不存在的错误。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

