@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
49 lines (48 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compileLess = void 0;
const less_1 = require("less");
const fs_extra_1 = require("fs-extra");
// less plugin to resolve tilde
class TildeResolver extends less_1.FileManager {
loadFile(filename, ...args) {
filename = filename.replace('~', '');
return less_1.FileManager.prototype.loadFile.apply(this, [filename, ...args]);
}
}
const TildeResolverPlugin = {
install(lessInstance, pluginManager) {
pluginManager.addFileManager(new TildeResolver());
}
};
const CssVarOperationPlugin = {
install({ tree: { Call, Anonymous, Expression }, visitors }, pluginManager) {
const call = (name, ...args) => new Call(name, [new Expression(args)]);
class Visitor {
constructor() {
this.native = new visitors.Visitor(this);
this.isPreEvalVisitor = true;
this.isReplacing = true;
}
run(root) {
return this.native.visit(root);
}
visitOperation(node) {
return call('calc', node.operands[0], new Anonymous(node.op), node.operands[1]);
}
visitNegative(node) {
return call('calc', new Anonymous('-1'), new Anonymous('*'), node.value);
}
}
pluginManager.addVisitor(new Visitor());
}
};
async function compileLess(filePath) {
const source = fs_extra_1.readFileSync(filePath, 'utf-8');
const { css } = await less_1.render(source, {
filename: filePath,
plugins: [TildeResolverPlugin, CssVarOperationPlugin]
});
return css;
}
exports.compileLess = compileLess;