2013-01-25 5 views
1
Http Server: node.js 0.8.16 
source files: mix of js and coffee 
AMD loader: curl/require 
Markup: jade 
CSS: styl 

Я создаю прототип приложения, используя вышеуказанную настройку. Все работает нормально, но я работаю над загрузкой загрузчика AMD, интегрированного с приложением. Папка активов выглядит следующим образом:Как использовать coffeescript с загрузчиком AMD и сервером узлов?

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

ОК, так что я хочу, чтобы получить index.coffee и foo.coffee быть скомпилирован как JS и служил, когда браузер запрашивает /js/foo.js и т.д. Это будет работать нормально, если я использовал connect-assets и положить != js('foo') в моем нефрита. Но то, что != js( запускает компиляцию связных активов, которая (я думаю) на лету компилирует файл кофе в js.

Но если я использую curl с дорогой вроде "foo" : "/js/foo.js", это не сработает, потому что метод js() метода connect-assets не начинается.

Есть ли промежуточное ПО для узла, который будет обрабатывать запросы на файлы кофе в виде файлов js? Я немного поглядел, и самые близкие, которые я мог найти, были связаны между собой.

Я бы хотел, чтобы вы не настраивали «наблюдателя» на мои файлы кофе. Поскольку я использую некоторые файлы js и некоторые файлы с кофе-js-js, я не хочу отслеживать, где находятся «реальные» js-файлы и где находятся «на лету» js-файлы.

Update 5/24: Я угробил все промежуточные бездельничать и пошел с grunt с наблюдателем, который собирает материал, когда он меняется. Прекрасно работает.

ответ

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"); 
     }); 
0

Я обеспечу другое решение, не о соединении промежуточного слоя. Я написал инструмент - camel для использования coffeescript с requirejs загрузчиком в стиле AMD.

Чтобы использовать верблюда, вы можете просто:

  • НПМ установки CAMEL
  • верблюда YOURPROGRAM.coffee

YOURPROGRAM.coffee должны быть написаны в стиле AMD.

Для небольшого примера можно проверить с:

для большого примера можно проверить с:

Он использует верблюда с AMD-Styl e library, WebWorkers на стороне сервера и других случаях HTML5, весь код находится в CoffeeScript.