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     

好的,所以我想获取index.coffeefoo.coffee编译为 js 并在浏览器请求等时提供服务。如果我使用connect-assets并放入我的玉标记,/js/foo.js这将正常工作。但这开始了 connect-assets 编译,(我认为)是即时将咖啡文件编译为 js。!= js('foo')!= js(

但是,如果我使用curl这样的路径"foo" : "/js/foo.js"将无法正常工作,因为 connect-assets 的 js() 方法没有启动。

是否有节点中间件可以将咖啡文件请求作为 js 文件处理?我看了一点,connect-assets 是我能找到的最接近的。

我想避免在我的咖啡文件上设置一个“观察者”。因为我使用了一些 js 文件和一些 coffee-as-js 文件,所以我不想跟踪“真正的”js 文件在哪里以及“on-the-fly”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

我将提供另一种解决方案,它不是连接中间件。我编写了工具 - camel,用于将 coffeescript 与 requirejs AMD 样式的加载器一起使用。

要使用骆驼,您可以:

  • npm 安装骆驼
  • 骆驼 YOURPROGRAM.coffee

YOURPROGRAM.coffee 应该以 AMD 风格编写。

对于小例子,您可以检查:

对于大示例,您可以检查:

它使用camel和AMD风格的库,服务器端的WebWorkers和其他HTML5案例,所有代码都在CoffeeScript中。

于 2013-02-26T03:03:59.580 回答