Less 是一个非常优秀的css增强方言。如果你熟悉Bootstrap,你会发现这个项目大量使用Less, 并且可以通过修改less文件,以此定制自己的boostrap。
最近在formdesigner中尝试使用less代替css。其中自己用node.js写了一个脚本来简化less编译操作。关于这个工具的代码,你可以在这里获取:
https://github.com/lvjian700/less2css
写本文的目的:
- 简单介绍less的使用
- 介绍如何将node.js脚本当shell使用
- 介绍node.js 拼接地址的方式
- 介绍如何使用node.js 调用shell
- 介绍如何使用node.js 监视文件改动
less 简介
如果你想写这么一段css
#main {
width: 960;
padding: 50px;
margin: 0px auto;
}
#main h3 {
font-size: 20px;
color: #3b5888;
background-color: #ccc;
padding: 10px;
}
使用less你可以这么写:
#main {
width: @mainWidth;
padding: 50px;
margin: 0px auto;
h3 {
font-size: 20px;
color: @titleColor;
background-color: #ccc;
padding: 10px;
}
}
这里提供的便利
- 提供变量的支持
- 更方便的方式写嵌套样式
如何使用less
1. 在html页面中嵌入less.js,动态渲染css
<link rel="stylesheet/less" href="less/base.less" type="text/css" media="screen" title="no title" charset="utf-8">
<script src="js/less.js" type="text/javascript" charset="utf-8"></script>
2. 使用less指令将less编译成css(这部分是我要简化的部分)
npm install less -g
less public/less/base.less > public/css/base.css
这里第二种方式是我需要简化的。
- 简化指令参数
- 监视文件改动,一旦改动,自动编译
简化指令参数:
1. 使用node.js的path包拼接文件路径:
//js file path is ${project}/bin/less2.js
var path = require('path');
var public_dir = path.join(__dirname, "..", "public");
var less_dir = path.join(public_dir, "less", "base.less");
var css_dir = path.join(public_dir, "css", "base.css");
2. 使用exec模块调用shell
var exec = require('child_process').exec;
function compile_less(input_file, output_file) {
var cmd = ['lessc ', input_file, ' > ', output_file].join('');
exec(cmd, {encoding: 'utf-8'},
function(error, stdout, stderr) {
if(error !== null) {
console.log(error);
return;
}
console.log(stdout);
});
}
console.log('compile ' + less_dir + ' once...');
compile_less(less_dir, css_dir);
3. 监视文件改动
var
fs = require('fs');
console.log('watching file ...');
fs.watchFile(less_dir, {
persistent: true,
interval: 1000 // 1 sec
},
function(curr, prev) {
console.log('the file changed, compile ...');
compile_less(less_dir, css_dir);
});
如何让node.js可以当shell用。
1. 获取node cmd的路径
which node
2. 将路径加到node.js文件第一行
#!/usr/local/bin/node
3. 为js文件添加执行权限
chmod +x bin/less2css.js
这样可以不在使用node ***.js 来执行脚本,直接使用 bin/less2css.js即可。当然你也可以去掉*.js的后缀。
全部代码
#!/usr/local/bin/node
var exec = require('child_process').exec,
path = require('path'),
fs = require('fs')
var public_dir = path.join(__dirname, "..", "public");
var less_dir = path.join(public_dir, "less", "base.less");
var css_dir = path.join(public_dir, "css", "base.css");
function compile_less(input_file, output_file) {
var cmd = ['lessc ', input_file, ' > ', output_file].join('');
exec(cmd, {encoding: 'utf-8'},
function(error, stdout, stderr) {
if(error !== null) {
console.log(error);
return;
}
console.log(stdout);
});
}
console.log('compile ' + less_dir + ' once...');
compile_less(less_dir, css_dir);
console.log('watching file ...');
fs.watchFile(less_dir, {
persistent: true,
interval: 1000 // 1 sec
},
function(curr, prev) {
console.log('the file changed, compile ...');
compile_less(less_dir, css_dir);
});
项目地址
https://github.com/lvjian700/less2css
参考资料
Node.js API: http://nodejs.org/api/
Less文档:http://lesscss.org/
LESS自动化编译与监控
本文介绍了一种使用Node.js简化LESS编译流程的方法,并通过实时监控LESS文件变化实现自动编译,有效提升前端开发效率。

被折叠的 条评论
为什么被折叠?



