通过 phantomJS 编译 lesscss 文件

发布于 2025-01-03 10:21:53 字数 398 浏览 5 评论 0原文

hej 我在使用 Maven 构建项目时想到了编译 lesscss 文件。 查看 lesscss 站点,可以编译那些在 html 文件的 head 部分引用它们的文件,就像这个

<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>

幻影的脚本可以访问本地硬盘驱动器上的任何文件一样,因此应该可以循环遍历 *.less 文件。现在的问题是如何编译这些文件并以 css 扩展名保存它们。

遗憾的是,命令行仅在安装到节点时才可用(或者也许我错了?)

感谢您的任何提示

hej I got idea to compile lesscss files while building my project with maven.
looking at lesscss site it is possible to compile those files referencing them in head section of html file like this

<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>

phantom's script can access any file on local hard drive so it should be possible to loop over *.less files. now the question is how to compile those files and save them back with css extension.

the pity is that command line is available only when installed to node (or maybe I wrong??)

thanks for any hint

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青春有你 2025-01-10 10:21:53

在第二次尝试之后,我创建了这个脚本

console.log('*********************************************************************');
console.log('executing script ' + phantom.scriptName);
console.log('phantomJS version ' + phantom.version.major + '.' + phantom.version.minor + '.' + phantom.version.patch);
console.log('*********************************************************************');
console.log('looks for less files under src/main/webapp/* and src/main/resources/*');
console.log('to change this pass root directory as script parameter');
console.log('example Usage: phantomjs-less.js src/main/resources/css');
console.log('*********************************************************************');

var root_directory = null;
if (phantom.args.length !== 0) {
    root_directory = phantom.args[0];
}

console.log('injecting less script');
phantom.injectJs('src/main/webapp/js/less-1.2.2.js');

var parser = new(less.Parser);
var searchLessIn = function(root, fs) {
    console.log('look for less in ' + root);
    if (fs.isDirectory(root)) {
        var files = fs.list(root);
        for (var index  = 2; index < files.length; index ++ ) {
            searchLessIn(root + '/' + files[index], fs);
        }
    } else {
        if (root.substr(-5) === '.less'){
            parseLess(root, fs);
        }
    }
    console.log('exit ' + root);
};

var parseLess = function(file, fs) {
    console.log('parse less file : ' + file);
    var opened = fs.read(file);
    console.log(opened);
    parser.parse(opened, function (err, tree) {
        if (err) { return console.error(err); }
        console.log(tree.toCSS());
    });
};

var fs = require('fs');
console.log('*********************************************************************');
console.log('current root directory =' + fs.workingDirectory);

var root = fs.workingDirectory + '/src/main/webapp/css';
console.log('look for less files under ' + root);

if (!fs.exists(root)) {
    console.log(root + ' directory doesnt exists')
    phantom.exit(1);
}
searchLessIn(root, fs);
phantom.exit(0);

,它应该将解析后的 css 打印到控制台

well after giving it a second try I created this script

console.log('*********************************************************************');
console.log('executing script ' + phantom.scriptName);
console.log('phantomJS version ' + phantom.version.major + '.' + phantom.version.minor + '.' + phantom.version.patch);
console.log('*********************************************************************');
console.log('looks for less files under src/main/webapp/* and src/main/resources/*');
console.log('to change this pass root directory as script parameter');
console.log('example Usage: phantomjs-less.js src/main/resources/css');
console.log('*********************************************************************');

var root_directory = null;
if (phantom.args.length !== 0) {
    root_directory = phantom.args[0];
}

console.log('injecting less script');
phantom.injectJs('src/main/webapp/js/less-1.2.2.js');

var parser = new(less.Parser);
var searchLessIn = function(root, fs) {
    console.log('look for less in ' + root);
    if (fs.isDirectory(root)) {
        var files = fs.list(root);
        for (var index  = 2; index < files.length; index ++ ) {
            searchLessIn(root + '/' + files[index], fs);
        }
    } else {
        if (root.substr(-5) === '.less'){
            parseLess(root, fs);
        }
    }
    console.log('exit ' + root);
};

var parseLess = function(file, fs) {
    console.log('parse less file : ' + file);
    var opened = fs.read(file);
    console.log(opened);
    parser.parse(opened, function (err, tree) {
        if (err) { return console.error(err); }
        console.log(tree.toCSS());
    });
};

var fs = require('fs');
console.log('*********************************************************************');
console.log('current root directory =' + fs.workingDirectory);

var root = fs.workingDirectory + '/src/main/webapp/css';
console.log('look for less files under ' + root);

if (!fs.exists(root)) {
    console.log(root + ' directory doesnt exists')
    phantom.exit(1);
}
searchLessIn(root, fs);
phantom.exit(0);

it should print parsed css to console

友欢 2025-01-10 10:21:53

尝试 lesscss maven 插件 https://github.com/marceloverdijk/lesscss-maven-plugin

它使用 rhino,所以不是 100ms,而是需要 3000ms,但它可以工作,你所做的就是将一些 xml 放入 pom.xml

try lesscss maven plugin https://github.com/marceloverdijk/lesscss-maven-plugin

it uses rhino, so instead of 100ms it'll take 3000ms, but it works and all you do is put some xml into pom.xml

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文