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()) ...
随机推荐
- mongodb的搭建
1, vi /etc/yum.repos.d/mongodb-org-3.2.repo 2, 添加如下内容 [mongodb-org-3.2] name=MongoDB Repo ...
- Hsqldb中设置主键,并让主键自增
CREATE TABLE userinfo ( Id INTEGER GENERATED BY DEFAULT AS IDENTITY, Name varchar(100) NOT NULL, Dep ...
- python字典的基本操作
字典的基本方法 什么是字典: 字典是一种 key - value的数据类型,听alex说就像我们上学用的字典,通过笔划,字母来查找对饮页面的详细内容. 语法: id_dict = { 'stu1101 ...
- tp5 migrate数据库迁移工具
tp5相对与tp3.2有很大的不同 migrate是其中一点,通过migrate程序员可以在php代码中创建数据库修改回滚等操作 首先下载migrate扩展,命令行到当前项目目录下执行 compose ...
- 实现一个协程版mysql连接池
实现一个协程版的mysql连接池,该连接池支持自动创建最小连接数,自动检测mysql健康:基于swoole的chanel. 最近事情忙,心态也有点不积极.技术倒是没有落下,只是越来越不想写博客了.想到 ...
- NoSQL数据库的认识
SQL数据库和NoSQL数据库介绍 什么是SQL数据库? 关系型数据库是依据关系模型来创建的数据库.而所谓的关系模型就是“一对一.一对多.多对多”等关系模型,这是一种二维表格模型,因此一个关系型数据库 ...
- SQL语句:查看排名前五的SQL语句耗时情况
total_worker_time , last_worker_time , max_worker_time , min_worker_time , ) , ( ( CASE statement_en ...
- 用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)-陈远波
一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...
- NOIP2018考前抱佛脚——搜索复习
目录 搜索 DFS 例1 P1101 单词方阵 题目描述 输入输出格式 输入输出样例 标程 例2 P1605 迷宫 题目背景 输入输出格式 输入输出样例 标程 例3 P1019 单词接龙 题目描述 输 ...
- PyQt5--CustomizeSignal
# -*- coding:utf-8 -*- ''' Created on Sep 14, 2018 @author: SaShuangYiBing Comment: This example is ...