less报“unrecognised input”是词法分析阶段失败,主因是不可见字符(如bom、零宽空格)、非ascii路径、非法注释/渐变写法或未加(css)修饰符的css导入。

报 Unrecognised input 不是语法写错了,而是 Less 在词法分析阶段就卡住了——它根本没开始“理解”你的代码,只是在读字节流时碰到了无法识别的字符或结构。
检查不可见字符和 BOM
零宽空格(U+200B)、软连字符(U+00AD)、UTF-8 BOM(EF BB BF)会直接让 Less 报错,且不提示具体字符位置。
- VS Code 中打开 .less 文件 → 右下角点击编码 → 选「Save with Encoding」→
UTF-8(不是UTF-8 with BOM) - 开启「Render Whitespace」(
editor.renderWhitespace: "all"),逐行扫·、¶、这类符号 - 终端执行
file -i your-file.less,若输出含charset=bom,用sed -i '1s/^\xEF\xBB\xBF//' your-file.less清除(Linux/macOS) - 从网页、Figma、Word 复制的代码,务必粘贴到纯文本编辑器(如 VS Code 的「Paste as Plain Text」)再中转
确认 @import 路径全是 ASCII
Less 解析器对路径里的中文、全角符号、反斜杠一律视为非法 token,哪怕文件系统能正常读取,也会在第 1 个汉字处抛 Unrecognised input。
- 禁止写
@import "../组件/按钮.less";或@import "./图标.png"; - Webpack 用户:在
less-loader配置中加paths: [path.resolve(__dirname, 'src')],然后改用@import "styles/button.less"; - Vite 用户:在
vite.config.ts的css.preprocessorOptions.less.paths做同样配置 - 命令行
lessc:必须用--include-path=src,再以英文路径导入,例如@import "components/reset.less";
验证注释与渐变写法是否合规
Less 对注释位置、linear-gradient()、var() 等 CSS 原生语法极其敏感,稍有不慎就触发解析中断。
-
//单行注释仅在行首 + 空格时安全;/* */内不能嵌套,且末尾不能紧贴变量声明,例如@color: #fff;/* 注释 */在旧版 lessc(3.13.x)中会崩 -
linear-gradient(top, #f00, #00f)必须用~"linear-gradient(top, #f00, #00f)"完整转义,否则逗号和括号会被当 Less 列表或表达式处理 -
var(--primary)必须写成~"var(--primary)",否则 Less 会尝试调用不存在的var()函数 - 所有
@import纯 CSS 文件(如normalize.css)必须加(css)修饰符:@import (css) "~normalize.css/normalize.css";
真正难定位的是那些“看起来完全合法”的报错——比如一个空格、一个隐藏的连字符、或者路径里某个被忽略的全角顿号。别急着改逻辑,先让文件回归最简 ASCII 状态,再一层层加回来。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











