Vite构建报错Could not resolve "../internals/window"问题求助
解决Vite构建时RollupError:无法解析"../internals/window"的问题
问题分析
你遇到的冲突源于define配置中的global: "window"与rollupOptions.external里的"jss-plugin-window":开发环境需要global映射到window才能正常运行,但构建阶段这个映射会干扰Rollup对外部模块内部依赖的解析,导致找不到../internals/window路径。
解决方案
通过按环境动态配置全局变量解决冲突:开发环境保留define配置,构建环境改用Rollup的inject插件注入全局变量,同时保留jss-plugin-window的外部依赖设置。
修改后的Vite配置如下:
import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import viteTsconfigPaths from "vite-tsconfig-paths"; import svgrPlugin from "vite-plugin-svgr"; import inject from '@rollup/plugin-inject'; // 先执行安装:npm install @rollup/plugin-inject --save-dev export default defineConfig(({ command, mode }) => { const isDev = command === 'serve'; return { plugins: [react(), viteTsconfigPaths(), svgrPlugin()], preview: { port: 3000, }, build: { outDir: "build", rollupOptions: { external: ["jss-plugin-window"], plugins: [ // 构建阶段注入global指向window inject({ global: 'window', }), ], }, }, define: isDev ? { global: "window" } : {}, server: { open: true, port: 3000, }, envPrefix: "REACT_APP_", }; });
关键逻辑说明
- 开发环境:用
define直接映射global到window,保证开发服务器正常运行 - 构建环境:移除
define中的全局映射,改用inject插件在打包时为代码注入global = window,避免干扰外部模块的路径解析
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

