4

expressでconnect-assetmanagerを使用しようとしています。どうやら私は接続ベースの例をエクスプレスアプリに適応させる方法を理解していません。

expressコマンドライン(実行したコマンドは下にスクロール)で作成されたスケルトンアプリを使用して、connect-assetmanagerホームページの例をマージしてみました。これが私のapp.jsです:

var express = require('express')
  , routes = require('./routes')
  , assetManager = require('connect-assetmanager');

var assetManagerGroups = {
    'css': {
        'route': /\/static\/css\/[0-9]+\/.*\.css/
        , 'path': './public/stylesheets/'
        , 'dataType': 'css'
        , 'files': [ 'style.css', 'style2.css' ]
    }
};

var assetsManagerMiddleware = assetManager(assetManagerGroups);
var app = module.exports = express.createServer();

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(assetsManagerMiddleware); 
  app.use(express.static(__dirname + '/public'));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.get('/', routes.index);

次に、layout.jadeを変更して、スタイルシートの参照ポイントがアセットマネージャールートを指すようにしました:/static/css/style.css

ウェルカムページが読み込まれ(スタイル設定を除く)、Chrome開発ツールで上記のcssパスのリクエストが失敗したことがわかります。ノードコマンドウィンドウにエラーはありません。アセットマネージャーのミドルウェアを接続して表現するために間違ったアプローチを使用していますか?それとも、正規表現の例を間違って読んだような愚かなことですか?

参考までに、サンプルアプリを作成するために実行したものは次のとおりです。

# using 2.5 since that's what the larger app is based on
sudo npm install -g express@2.5.x

# create the sample express app
express expressAssetTest
cd expressAssetTest
# add connect-assetmanager to the dependencies
echo '{
    "name": "expressAssetTest"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.5.11"
    , "jade": ">= 0.0.1"
    , "connect-assetmanager": ">= 0.0.3"
  }
}' > package.json
# add a 2nd stylesheet for testing purposes
echo ".mycssclass { top: 0; }" > public/stylesheets/style2.css
sudo npm install
4

1 に答える 1

4

私の設定も同様で、connect-assetmanagerを機関車と統合しようとしています。JavaScriptのマージでも同じ問題が発生していました。ルート正規表現をから変更することで機能するようになりました

'route': /\/static\/javascripts\/[0-9]+\/.*\.js/

'route': /\/static\/javascripts\/script\.js/

レイアウトテンプレートから/static/javascripts/script.jsを呼び出します

例にその特定の正規表現が含まれている理由がわかりません。より適切なものは次のようになります。

'route': /\/static\/javascripts\/[^/?*:;{}\\]+\.js/

ここでの提案に基づく:有効なファイル名を見つけるための正規表現

于 2012-08-14T17:16:29.287 に答える