0

スタイラスミドルウェアをセットアップしようとしていますが、成功しません。このドキュメントは、初心者やNodejsを初めて使用する人には適していません。私が推測したのは、スタイラスミドルウェアを使用する小さなミニノードアプリを作成する必要があるということでした。ただし、そのページに設定された単純なものを使用しても、これを機能させることはできませんでした。これが私がしたことです:

もちろん、スタイラスだけでなくノードもインストールしています。次に、ファイルstylus-middleware.appを作成しました。これまでに、次のコードを追加しました(ドキュメントの最も単純な例に基づいています)。

var app = connect();
app.middleware(__dirname);

シンプルなアプリを実行しようとすると、次のエラーが発生します。

Tue Feb 19:~/Sites/test $ node stylus.app
/Library/WebServer/Documents/test/stylus.app:1
ction (exports, require, module, __filename, __dirname) { var app = connect();
                                                                    ^
ReferenceError: connect is not defined
    at Object.<anonymous> (/Library/WebServer/Documents/test/stylus.app:1:73)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

Web検索を行ったところ、connect()がnodejsの接続プラグインに関連する関数であることがわかったので、インストールしようとしましたが、発生したエラーは同じでした。だから私は困惑しています...ここで何が起こっているのかを知るには、nodejsがどのように機能するかについてはまだ十分にわかりません。

アドバイスをいただければ幸いです。

アップデート

少しいじった後、スタイラスミドルウェアをセットアップして接続サーバーにリンクする方法を理解しました。しかし、私のコードはまだ機能していません。エラーは発生しませんが、スタイラスはアプリのディレクトリ(つまり、__ dirname)にある.stylファイルをコンパイルしていません。現在のアプリコードは次のとおりです。

function compile(str, path) {
      return stylus(str)
        .import(__dirname)
        .set('filename', path)
        .set('warn', true)
        .set('compress', true);
}


var stylus = require('stylus');
var connect = require('connect');
var app = connect();
app.use(stylus.middleware({
        src: __dirname,
        dest: __dirname,
        compile: compile
}));
app.use(connect.static(__dirname));
var server = require('http').createServer(app).listen(8000);
console.log('Watching .styl files in directory: '+__dirname);

誰かがここで欠けているものやいくつかの提案を持っているアイデアを持っているなら、私はいくつかのアイデアを聞いてみたいです...

4

3 に答える 3

1

これが私にとってうまく機能する最小限のアプリです。Expressただし、の代わりに使用しConnectます。

ExpressとStylusを最初にインストールします。

npm install express
npm install stylus

次に、サーバーコード(app.jsまたは任意のファイル名)を作成します。

var express = require('express');
var stylus  = require('stylus');
var app     = express();

app.use(stylus.middleware({
    src     : __dirname + '/node/www',
    dest    : __dirname + '/node/nginx',
    compile : function(str, path) {
      return stylus(str)
        .set('filename', path)
        .set('warn', true)
        .set('compress', true);
    }
}));

app.use(express.static(__dirname + '/node/nginx'));

app.listen(3000);

簡単なスタイラススタイルシートを作成します(これを呼び出します./node/www/app.styl)。

body
  background #123

サーバーを起動します。

node app.js

CSSファイルのリクエストを実行します。

curl http://localhost:3000/app.css

そのリクエストの後./node/nginx、(生成された)が含まれているかどうかを確認しますapp.css

編集:これはあなたの問題の一部しか解決しないかもしれないことに気づきました。

生成されたCSSファイルをnginxで提供する場合は、機能しません。その理由は、Stylusミドルウェアが.cssファイルの要求をインターセプトして、a)付随する.stylファイルがあり、b)その.stylファイルをコンパイルする必要があるかどうかを確認するためです。nginxがCSSファイルのすべてのリクエストをキャッチした場合、リクエストがStylusミドルウェアによって処理されることはありません。

于 2013-03-02T08:09:59.760 に答える
1

コマンド ラインで connect をインストールし、それをコードに含める必要があります。

npm install connect

そして、このように要求します

var connect = require('connect),
    app = connect();
于 2013-02-19T10:47:18.270 に答える