Expressワークスペースでより少ないCSSをレンダリングできません。
これが私の現在の構成です(my css/less files is in 'public/stylo /'):
app.configure(function()
{
app.set('views' , __dirname + '/views' );
app.set('partials' , __dirname + '/views/partials');
app.set('view engine', 'jade' );
app.use(express.bodyDecoder() );
app.use(express.methodOverride());
app.use(express.compiler({ src: __dirname + '/public/stylo', enable: ['less']}));
app.use(app.router);
app.use(express.staticProvider(__dirname + '/public'));
});
これが私のmain.jadeファイル:
!!!
html(lang="en")
head
title Yea a title
link(rel="stylesheet", type="text/css", href="/stylo/main.less")
link(rel="stylesheet", href="http://fonts.googleapis.com/cssfamily=Droid+Sans|Droid+Sans+Mono|Ubuntu|Droid+Serif")
script(src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js")
script(src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js")
body!= body
これが私のmain.less css:
@import "goodies.css";
body
{
.googleFont;
background-color : #000000;
padding : 20px;
margin : 0px;
> .header
{
border-bottom : 1px solid #BBB;
background-color : #f0f0f0;
margin : -25px -25px 30px -25px; /* important */
color : #333;
padding : 15px;
font-size : 18pt;
}
}
そしてここに私のgoodies.less css:
.rounded_corners(@radius: 10px)
{
-moz-border-radius : @radius;
-webkit-border-radius: @radius;
border-radius : @radius;
}
.shadows(@rad1: 0px, @rad2: 1px, @rad3: 3px, @color: #999)
{
-webkit-box-shadow : @rad1 @rad2 @rad3 @color;
-moz-box-shadow : @rad1 @rad2 @rad3 @color;
box-shadow : @rad1 @rad2 @rad3 @color;
}
.gradient (@type: linear, @pos1: left top, @pos2: left bottom, @color1: #f5f5f5, @color2: #ececec)
{
background-image : -webkit-gradient(@type, @pos1, @pos2, from(@color1), to(@color2));
background-image : -moz-linear-gradient(@color1, @color2);
}
.googleFont
{
font-family : 'Droid Serif';
}
クールな取引。今:私はnpm経由でインストールを減らしましたそして別の投稿から@importsは.css
ではなく.less
を参照するべきだと聞いていました。いずれにせよ、私は翡翠と少ないファイルで.less
を.css
に切り替えるcombinationsを試しましたが成功しませんでした。
あなたが助けてくれるか、解決策を持っているなら、私はそれを大いに感謝します。
注: ol'.css
を入力すると、ヒスイの部分は正常に機能します。
注2:コマンドラインからlesscを使用すると、コンパイルが少なくなります。
おやおや、そのようなものはパスがどのように機能するかについて非常に一貫性がありません、しかし私はあなたがそれを機能させる方法を見つけました。
最初の問題は、compiler
とstaticProvider
の両方のパスにあり、コンパイラは/public
を使用する必要があり、それより下のすべてのリクエストにフックします。そうしないと、コンパイラは/public/stylo/stylo
のようなパスを使用しようとします。
2番目の問題は、@import
ファイルのmain.less
と、コンパイラが少なくて愚かで相対的なインポートを処理しないという事実にあります。
@import "/public/stylo/goodies.css";
でmain.less
を使用すると、機能します。
less
で相対パスの問題に関するバグを報告しました。
https://github.com/cloudhead/less.js/issues/issue/177
出力されたcssを縮小したい場合は、(接続モジュールからの)組み込みコンパイラーにcompressオプションがないことがわかりました。したがって、独自のミドルウェアコンパイラを作成するのではなく。アプリのconnectlessコンパイラを上書きしました。
var express = require('express');
var app = express.createServer();
var less;
express.compiler.compilers.less.compile = function (str, fn) {
if (!less) less = require("less");
try {
less.render(str, { compress : true }, fn);
} catch (err) {
fn(err);
}
};
app.use(express.compiler({ src: publicdir, enable: ['less'] }));
問題は、コンパイラがファイルのmtimeが変更された場合にのみファイルをコンパイルすることです。
あなたが持っているとしましょう:
// A.less
@import "B.css";
そして
// B.less
body {
background: #f00;
}
B.less
を変更しましたが、Aは再コンパイルされません!
何ヶ月も待っているプルリクエストがあります。マスターコンパイラの代わりにフォークコンパイラを使用できます。