0

ドキュメントhttp://compoundjs.com/docs/#asset-compiler-adding-your-own-compilerに従ってアセット コンパイラを定義しようとしていますが、エラーが発生し続けます。

app.use(compound.assetsCompiler.add('scss', {
                                ^
TypeError: Cannot call method 'add' of undefined

environment.js私のファイル全体は次のようになります。

module.exports = function (compound) {

    var express = require('express');
    var app = compound.app;

    app.configure(function (){
      app.use(compound.assetsCompiler.add('scss', {
        render: function (str, options, fn) {
          try {
            fn(null, @scss.render(str));
          } catch (err) {
            fn(err);
          }   
        },  
        scss: require('node-sass'),
        sourceExtension: 'scss',
        destExtension: 'css'
      }).init());

      app.use(express.static(app.root + '/public', { maxAge: 86400000 }));
      app.set('jsDirectory', '/javascripts/');
      app.set('cssDirectory', '/stylesheets/');
      app.set('cssEngine', 'scss');
      app.use(express.bodyParser());
      app.use(express.cookieParser('secret'));
      app.use(express.session({secret: 'secret'}));
      app.use(express.methodOverride());
      app.use(app.router);
    }); 

};

ステートメントのconsole.log(compound.assetsCompiler);直前にを試してみましたが、確かに が得られました。ドキュメントには、(単一のアセット)を使用するようにも記載されていますが、これはタイプミスだと思いますが、そのタイプミスが何度も間違っていたので、試してみましたが、同じ問題がありました。誰でもこれを修正する方法を知っていますか?app.use(compount.assetsCompiler...undefinedcompound.assetCompiler.add(...);

4

1 に答える 1

2

私は解決策を考え出しました。または少なくとも回避策。オートローダーはAssetsCompilerそれを初期化しないように要求しているように見えますが、解決策は、オブジェクトを要求して手動で初期化することですenvironment.js

module.exports = function (compound) {
  'use strict';
  var express = require('express');
  var app = compound.app;
  // require the assetsCompiler
  var compiler = require('co-assets-compiler');

  app.configure(function () {
    // calling the init function will add the assetsCompiler object
    // to the compound object and everything else should now work
    // as expected
    compiler.init(compound);
    app.use(compound.assetsCompiler.add('scss', {
     render: function (str, options, fn) {
         @scss.render(str, ƒ (err, css) {
          fn(err,css);         
        },{                    
          includePaths: [app.root + '/app/assets/stylesheets/'] 
      });
    },
      scss: require('node-sass'),
      sourceExtension: 'scss', 
      destExtension: 'css'     
    }).init());  

    app.use(express.static(app.root + '/public', { maxAge: 86400000 }));
    app.set('jsDirectory', '/javascripts/');
    app.set('cssDirectory', '/stylesheets/');
    app.set('cssEngine', 'scss');
    app.use(express.bodyParser());
    app.use(express.cookieParser('secret'));
    app.use(express.session({secret: 'secret'}));
    app.use(express.methodOverride());
    app.use(app.router);
  });
};
于 2013-03-31T17:01:03.990 に答える