1
Http Server: node.js 0.8.16
source files: mix of js and coffee
AMD loader: curl / require
Markup: jade 
CSS: styl

上記の設定を使用してプロトタイプアプリを作成しています。すべて正常に動作していますが、AMDローダーをアプリに統合する作業を行っています。アセットフォルダは次のようになります。

|____assets                                                    
| |____css                                                     
| | |____style.css                                             
| | |____style.styl                                            
| |____img                                                     
| |____js                                                      
| | |____bacon.js                                              
| | |____curl.js                                               
| | |____foo.coffee                                   
| | |____index.coffee     

OKなので、取得してjsとしてコンパイルし、ブラウザの要求などで提供したいと思いindex.coffeeます。これは、 connect-assetsを使用してjadeマークアップを入れれば問題なく機能します。しかし、それは接続アセットのコンパイルを開始します。これは、(私が思うに)その場でコーヒーファイルをjsにコンパイルすることです。foo.coffee/js/foo.js!= js('foo')!= js(

しかし、connect-assetsのjs()メソッドが開始されていないため、curlこのようなパスで使用すると機能しません。"foo" : "/js/foo.js"

コーヒーファイルのリクエストをjsファイルとして処理するノード用のミドルウェアはありますか?少し調べてみましたが、接続ア​​セットが最も近いものでした。

コーヒーファイルに「ウォッチャー」を設定する必要はありません。私はいくつかのjsファイルといくつかのcoffee-as-jsファイルを使用しているので、「実際の」jsファイルがどこにあるかと「オンザフライ」jsファイルがどこにあるかを追跡する必要はありません。

アップデート5/24:私はすべてのミドルウェアのフィドルファドルを捨てて、grunt変更されたときにものをコンパイルするウォッチャーを使用しました。よく働く。

4

2 に答える 2

0

うん、ほとんど重複している。これが将来誰かを助ける場合に備えて、とにかく答えます。

https://github.com/wdavidw/node-connect-coffee-script

var app = express();

srcFolder = path.join(__dirname, 'assets', 'src', 'coffee');
publicFolder = path.join(__dirname, 'assets');
console.log("public folder: " + publicFolder);

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  ...
  app.use(require('connect-coffee-script')({
         src: srcFolder, dest: path.join( publicFolder, 'js')
  }));

  app.use(stylus.middleware ({
    debug: true,
    force: true,
    src: path.join(__dirname, 'assets', 'src', 'styl' ),
    dest:  path.join(__dirname, 'assets', 'css')})
  );

  app.use(express.static(publicFolder));
});

次に、layout.jade側で:

script
  curl = {
        baseUrl: "/js",
        paths: {
          "jquery": "//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.min.js",
          "foo" : "foo.js",
          "index" : "index.js",
          "bacon" : "bacon.js"
        }
      };
script(src='/js/curl.js')
script
  //debugger; 
  curl(['js!jquery', 'js!bacon', 'js!foo!order', 'js!index!order'])
    .then(function(){
          console.log("scripts loaded");
          },
        function(){
          alert("a module failed to load");
         });
于 2013-01-25T22:19:26.553 に答える
0

I will provide another solution, it is not a connect middleware. I wrote the tool - camel for using coffeescript with requirejs AMD-style loader.

To use camel, you can just:

  • npm install camel
  • camel YOURPROGRAM.coffee

YOURPROGRAM.coffee should be written in AMD style.

For small example you can check with:

For Big example you can check with:

It use camel with AMD-style library, WebWorkers in server side and other HTML5 cases, all the code is in CoffeeScript.

于 2013-02-26T03:03:59.580 に答える