【记录】rollup下less插件和postcss插件问题排查小记.md

问题描述
1 | ``` js |
提示 config.less 文件 编译不识别 error: [LessError: Unrecognised input]
排查步骤
- 错误定位:
var isFinished = parserInput.i >= input.length
中的isFinished
为fasle 导致报错 - 为什么
parserInput.i
是0 - 找到
parserInput.i
给值的地方 - 定位到错误是发生在这段逻辑中
browser_plugin_template/node_modules/_less@4.2.0@less/lib/less/parser/parser.js
- 在这个文件中,出错的逻辑在在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20try {
parserInput.start(str, context.chunkInput, function fail(msg, index) {
throw new less_error_1.default({
index: index,
type: 'Parse',
message: msg,
filename: fileInfo.filename
}, imports);
});
tree_1.default.Node.prototype.parse = this;
root = new tree_1.default.Ruleset(null, this.parsers.primary());
tree_1.default.Node.prototype.rootNode = root;
root.root = true;
root.firstRoot = true;
root.functionRegistry = function_registry_1.default.inherit();
}
catch (e) {
return callback(new less_error_1.default(e, imports, fileInfo.filename));
}
var endInfo = parserInput.end();end
的地方就报错了,问题在于root = new tree_1.default.Ruleset(null, this.parsers.primary());
这句的调用,这个逻辑从名字上看是以树状结构去搜索解析css的样式。
换言之,为了定位报错的原因,已经找到less-plugin里的逻辑,但仍然无法定位具体原因,还要继续深入,这么一来,问题已经无法继续追查下去 - 换个思路
parserInput.i
值不对,那么就监听所有可以给parserInput.i
赋值的地方,看报错前最后一次调用是谁发起的 - 然后发现
parserInput.i
被赋值的地方很多,而且很难以收口debugger,这意味着,通过less插件代码,定位错误原因的努力失败 - 然后想到去搜索git主页的issue 看是否有类似的问题
- 发现有类似的问题,并且很久没有结果了
- 果断用新插件(postcss,支持use loader,加载解析不同类型的样式文件)