LESS-Middleware:Node.js 和 LESS 的完美搭配
LESS 是一个编写 CSS 的很好的方式 ,让你可以使用变量,嵌套规则,混入以及其它许多有用的功能,它可以帮助您更好地组织你的 CSS 代码。
1 2 3 4 5 6 7 8 9 | var lessMiddleware = require( "less-middleware" ); app.use(lessMiddleware({ src: __dirname + "/less" , dest: __dirname + "/public/css" , prefix: "/css" , force: true })); app.use(express. static (__dirname + "/public" )); |
在这个例子中,我把源目录配置为我的应用程序的根目录下的 "/less" 目录,并让 CSS 输出到 "/public/css 目录。此外,你还需要指定 "prefix" 属性,以匹配跟在 "/public" 后面的目录,即 "/css" 目录。
你还可以指定其它参数,上面指定了 force 参数,让每次请求的时候重新编译 LESS 文件,再结合自动刷新功能,这样在开发的时候修改样式代码都可以有即时的效果。
最后在页面上引用 CSS 文件就和正常的一样了:
1 | <link rel= "stylesheet" , type= "text/css" , href= "css/styles.css" > |
升级和迁移
这边文章发布的时候,less-middleware 已更新到到 1.0.3 版本,上面的配置是针对 0.1.x 的,下面给大家介绍如果从 0.1.x 迁移到 1.0.x。
首先,也是重要的变化——源目录参数的变化,之前是放在 options 参数里的,如下:
1 2 3 | lessMiddleware({ src: path.join(__dirname, '/public' ) }) |
因为源目录是必备参数,所以升级之后作为中间件的第一个参数,如下:
1 | lessMiddleware(path.join(__dirname, '/public' )) |
第二个变化是中间件参数和 LESS 参数分离,这样参数结构更清晰明了,如下:
1 | lessMiddleware(source, [{options}], [{parserOptions}], [{compilerOptions}]) |
options 参数是提供给中间件使用的,而后面两个参数对象不会影响中间件,是传递给 LESS 解析和编译器的。
在这个调整之后,对应参数定义方式也要相应的调整,下面是一些对应的修改:
compress
: 从options 移除,
需要在compilerOptions 中定义;
dumpLineNumbers
: 从options 移除,需要再
parserOptions 中定义;
optimization
: 从options 移除,
需要再
parserOptions 中定义;
paths
: 从options 移除,
需要再
parserOptions 中定义;
preprocessor
: 已经被移动到preprocessor.less 中进行定义;
relativeUrls
: 从options 移除,
需要再
parserOptions 中定义;
sourceMap
: 从options 移除,
需要在compilerOptions 中定义;
yuicompress
: 从options 移除,
需要在compilerOptions 中定义;
第三个变化是新增加了参数,同时移除了 prefix 和 treeFunctions 参数,让你可以更灵活的进行配置,如下:
postprocess.css
: 在被保存之前,修改 CSS 编译输出;preprocess.less
: 在 LESS 被解析和编译前进行修改;preprocess.path
: 在被文件系统加载前,修改 LESS 路径;
有了这几个参数,我们之前使用 prefix 实现的功能可以用下面的方式达到同样的效果:
1 2 3 4 5 | preprocess: { path: function (pathname, req) { return pathname.replace(/^\/less\ //, '/css'); } } |
更详细的信息,可以参考 less-middleware 官方文档。
作者:山边小溪
主站:yyyweb.com 记住啦:)
欢迎任何形式的转载,但请务必注明出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2011-05-19 使用 HTML5 可以做的五件很棒的事情
2011-05-19 分享最新20款非常棒的 CSS 工具
2010-05-19 15 个 JavaScript Web UI 库