NodeJS旅程 : Less
我一直强调我是个很懒的人,虽然我认为自己是个代码控但不代表我喜欢写大量代码。有做Web前端开发的人一定都接触CSS,由其在当下CSS3更是做出Cool站的必修课。我曾和不少的前端开发讨论过CSS3,我却发现在他们的眼中,CSS3却是一个非常难啃的骨头,平时写CSS3也只能是痛并快乐着。他们人都在说 “能少写一点吗?” 我其实并没有这种感觉,CSS代码量是大,但比起长年写服务端的代码也只不过是一个小部分而已。只是觉得写CSS3总是有一种思路不清晰的感觉,如果写CSS能像写类那样,速度就高了。直到我用了LESS!
"Less is More"! 我觉得LESS最酷的是他的能让我清晰地思考,能以面向对象的方式写CSS!让肥胖而臃肿的CSS代码变更更有骨感更为之高雅。VS.NET中有支持LESS的插件:Web Essentials . 可以支持动态将*.less文件生成*.css。不过支持上还是稍欠不足,由其在性能上有待提高。我试过同时编译10个比较大的less文件(每个代码行大约在600行左右),在i7 2.8G的机器上跑都需要1分多钟,而且很编译时内存损耗大约在2G左右(一个文件大约需要200M左右的内存),在VS.NET2012下Less有很多格式化错误。或者可以使用 Bundle Transformer 建立运行期动态编译,但性能还很是个问题,而且使用复杂。总之在ASP.NET MVC我也一没有找到其它能比这两个做法更好的方案。
现在情况不同了,在node架构下使用LESS是一件很幸福的事!node支持less的模块就数:less-middleware 最好用了。IDE中WebStorm也对LESS作了很好的支持。

Less middleware是一套基于运行期动态编译的模块,只有less的原文件被改动时或css文件不存在时才会启动编译。Less middleware的动态编译速度极快,完全没有在asp.net MVC上那种可怕的损耗问题出现。
在 epxress中配置less-middleware
var express = require('express');
var app = express();
...
app.use(require('less-middleware')(path.join(__dirname, 'public')));
...
这段代码的意思是将 root/public 目录作为less-middleware的检测目录,在运行期当引用该目录下的css文件时,会触发less-middleware的动态编译。
如我的站点上有这样的目录结构
/public
/styles
/style.less
在Html中引用style.css
...
<link rel="stylesheet" href="/public/styles/style.css" />
...
当打开Browser访问该页面时,less-middleware会自动将style.less编译成为style.css, 而且不是每次都编译只是css文件不存在或者less文件发生了改变才会编译。
如果所有的less文件想保存在 /less目录下,而输出时放在/css的话,可以更改less-middleware 编译选项:
app.use(require('less-middleware')(path.join(__dirname, 'public'),
{
preprocess: {
path: function(pathname, req) {
return pathname.replace(/^/less//, '/css');
}
}
}));
快点动手在node.js中试试less吧,你会有完全不同的开发体验。
NodeJS旅程 : Less的更多相关文章
- NodeJS旅程 : module 不可忽略的重点
modules 模块的简介 Module 是Node.js中最重要的一个部分也是进行深度开发前的必修课.掌握Module才能真正理解NodeJS的精髓,你会发现从思路上会有极大的扩展. 学会写mod ...
- NodeJS旅程 : express - nodejs MVC 中的王牌
express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...
- 死磕NodeJs之REPL与For Server,我的艰辛的旅程(一)
ode.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接 ...
- 新的旅程:NodeJS - 环境篇
用ASP.NET MVC好多年了,还记得当初为MVC所倡导的"DRY"理念所感染,为Razor的简单而震撼.随着MVC的成熟反而让我觉得似乎渐渐地走入了微软营造的一种高技术的牢笼. ...
- nodeJS 菜鸟入门
从一个简单的 HTTP 服务开始旅程-- 创建一个 server.js 文件,写入: //最简单的 http 服务例子 var http = require("http"); ht ...
- 手把手教你做爬虫---基于NodeJs
前言: 趁着北京今儿天气格外的蓝,我觉得我得干点什么,于是乎,卷起袖子,整理一下最近做爬虫的那些事儿. 目标:爬取北京大学软件与微电子学院的所有新闻,并将内容及图片存储到本地. 设计思路:经过对北京大 ...
- 当Shell遇上了NodeJS
此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 摘要 在企业级系统维护和互联网运维中,Shell脚本的编写与维护常必不可少, 但是Shell脚本的编写与调试 ...
- ApacheCN NodeJS 译文集 20211204 更新
Node API 开发入门指南 零.前言 一.Node.js 简介 二.构建 API--第 1 部分 三.构建 API--第 2 部分 React TypeScript Node 全栈开发 零.序言 ...
- NodeJs之OS
OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...
随机推荐
- 使用Fiddler模拟客户端http响应
在客户端开发中,常常需要对一些特殊情况做处理,比如404.503等,又比如服务返回错误数据等.而测试这些情况会比较麻烦,往往都是找开发人员配合修改代码,这样效率不高. 接触到Fiddler之后,这样的 ...
- python常用模块之logging模块
#日志级别 : noset debug info warning error critical #控制台默认的级别是warning的. import logging logging.basicConf ...
- Java修改服务器(tomcat)响应头 Server:Apache-Coyote/1.1
Server:Apache-Coyote/1.1 :很多人有说有漏洞,是否有没研究过, 只知道Apache-Coyote是tomcat处理socket链接信息,包装request.response等底 ...
- QT学习2
一.常用控件与常用的功能函数. QDialog.QMainWindow.QPushButton.QLabel.QLineEdit 构造函数指定父容器.setText,getText,size,res ...
- MySQL数据行溢出的深入理解
一.从常见的报错说起 故事的开头我们先来看一个常见的sql报错信息: 相信对于这类报错大家一定遇到过很多次了,特别对于OMG这种已内容生产为主要工作核心的BG,在内容线的存储中,数据大一定是个绕不开的 ...
- APP性能测试,网易Emmagee工具
APK地址:https://github.com/NetEase/Emmagee/releases/download/V1.2.1/Emmagee-1.2.1.apk 开源代码github地址:htt ...
- 矩阵dp
矩阵dp 这里是矩阵dp,不是矩阵乘法优化dp. 矩阵上的dp好像也没什么特殊的?大概有一个套路就是从上向下,从左向右进行dp吧. 首先第一道题好像不是矩阵dp... 1005 矩阵取数游戏:http ...
- BZOJ3533:[SDOI2014]向量集(线段树,三分,凸包)
Description 维护一个向量集合,在线支持以下操作: "A x y (|x|,|y| < =10^8)":加入向量(x,y); " Q x y l r (| ...
- 关于java中的使用通配符错误,错误信息Diamond types are not supported at language level '5‘
当时,我问了下大神,他们问我是不是jdk问题.因为jdk8才支持这样的棱形写法.当时自己的jdk版本是jdk8,然后就奇怪了,最后我发现原来在Language level中调成了5.0 5.0不支持6 ...
- C#启动另一个应用程序并传参数
第一个程序: try { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "Windows ...