如何配置Rollup(通过Vite)与Node保持无斜杠#导入别名一致?
配置Vite支持无斜杠的#前缀模块导入
要让Vite(基于Rollup)支持import logger from '#logger'这类无斜杠的#前缀导入,同时和Node.js的package.json导入规则保持统一,你需要使用正则匹配的别名配置,而非简单的字符串匹配。
正确的Vite配置
修改你的vite.config.js,添加正则捕获式的别名规则:
import { defineConfig } from 'vite' import { resolve } from 'path' export default defineConfig({ resolve: { alias: [ // 匹配所有#开头的模块,捕获#后的路径部分 { find: /^#(.+)/, replacement: resolve(__dirname, 'src/$1') }, // 可选:支持直接import '#'导入src目录的入口文件(如src/index.js) { find: '#', replacement: resolve(__dirname, 'src') } ] } })
配置说明
- 正则
^#(.+)会精准匹配#logger、#utils/format这类导入路径,把#后的部分(如logger、utils/format)拼接到src目录路径后,最终解析为src/logger、src/utils/format。 - Vite会自动处理文件扩展名(如
.js、.ts)和目录入口文件(如index.js),和Node.js的模块解析逻辑一致。
与Node.js配置对齐
你的package.json中已经配置了正确的Node.js导入规则:
"imports": { "#*": "./src/*" }
这个规则会让Node.js把#logger解析为./src/logger,和Vite的配置效果完全一致,现在前后端可以统一使用import logger from '#logger'的导入格式。
为什么之前的配置无效
你之前尝试的字符串匹配(find: '#')只会精确匹配import x from '#'这种导入,无法匹配#logger这类带后缀的路径。必须使用正则捕获的方式,才能把#前缀和后续的模块路径关联起来,实现无斜杠的导入。
内容的提问来源于stack exchange,提问作者Joe Jankowiak
相关产品推荐
相关产品推荐

