less编译报“parseerror: unrecognised input”根本原因是解析器在词法分析阶段将中文路径中的汉字视为非法token,而非编码问题;唯一可靠解法是通过构建工具(如webpack的less-loader paths、vite的preprocessoroptions.less.paths或lessc的--include-path)配置英文根路径,使@import使用纯ascii路径。

Less编译报“ParseError: Unrecognised input”且路径含中文
根本不是编码问题,而是 Less 解析器把中文字符(尤其是路径中的汉字、全角符号)当成了非法 token。它不支持 UTF-8 路径里的非 ASCII 字符参与 @import 或 url() 解析——哪怕文件系统能正常读取,Less 4.x 默认也会直接抛错。
- 错误现象:编译中断,报错类似
ParseError: Unrecognised input in .../src/样式/reset.less on line 3,而那行只是@import "../组件/按钮.less"; - 真实原因:Less 原生解析器对路径字符串做词法分析时,遇到中文会卡在第一个汉字上,不尝试转义或解码
- VS Code 或 Webpack 构建里看到的“找不到模块”,往往就是这个 ParseError 被吞掉后降级成的模糊提示
- 别试
@import "~./组件/按钮.less"或加引号包裹——~对@import有效但不解决中文解析,单双引号也无效
如何让 Less 正确加载中文路径的 .less 文件
唯一可靠办法是绕过 Less 自身的路径解析,改用构建工具提前 resolve —— 本质是让中文路径在 Less 看来“不存在”。
- Webpack 用户:在
less-loader配置中加paths,指向不含中文的根目录,例如paths: [path.resolve(__dirname, 'src')],然后所有@import改写成英文路径:@import "components/button.less"; - Vite 用户:在
vite.config.ts的css.preprocessorOptions.less.paths做同样配置,并确保@import不带中文段 - 命令行
lessc:必须用--include-path参数指定英文根路径,再用相对英文路径导入,例如lessc --include-path=src src/样式/reset.less out.css→ 导入语句得写@import "components/button.less"; - 绝对禁止:在
@import或url()里直接写"./按钮.less"或url(./图标.png)—— 中文字符会立刻触发解析失败
为什么 less-loader 的 javascriptEnabled 不能解决中文路径
javascriptEnabled 只是用来启用 Less 里的 JS 表达式(如 @size: unit(10px / 2, px);),和路径解析完全无关。开启它不仅没用,还会带来安全风险(执行任意 JS),2026 年主流构建配置已默认禁用。
真正卡住的环节始终是 Less 编译器前端的 tokenizer,它连 src/按钮.less 这个字符串都没机会送到后续逻辑——在字节流层面就判定非法了。所以所有“改编码”“加 BOM”“换编辑器保存格式”的尝试都无效。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











