2017-08-29 6 views
0

次のアセンブルファイルがあり、すべてが期待通りにロードされています。ハンドルバーを使用するとファイルがコンパイルされますが、必要なヘルパーはありません。だから私は アセンブルするカスタムハンドルバーヘルパーをインポートする正しい方法

var gulp = require('gulp'); 
var rename = require('gulp-rename'); 
var assemble = require('assemble'); 
//var helpers = require('handlebars-helpers'); 
var app = assemble(); 
var prettify = require('gulp-prettify'); 
var config = require('../config'); 

gulp.task('init', function(cb) { 
    app.helpers(config.paths.path_src + 'partials/_helpers/is-helper.js'); 
    //app.helper('compare', helpers.comparison()); 
    app.partials(config.paths.path_src + 'templates/includes/**/*.hbs'); 
    app.layouts(config.paths.path_src + 'templates/layouts/**/*.hbs'); 
    app.pages(config.paths.path_src + 'templates/content/**/*.hbs'); 
    cb(); 
}); 

gulp.task('assemble', ['init'], function() { 
    return app.toStream('pages') 
    .pipe(app.renderFile()) 
    .pipe(prettify({ 
     indent_inner_html: false, 
     preserve_newlines: true, 
     end_with_newline: true, 
     extra_liners: ['head', 'body'] 
    })) 
    .pipe(rename({ 
     extname: '.html' 
    })) 
    .pipe(rename({dirname: ''})) 
    .pipe(app.dest('site')); 
}); 

gulp.task('test', ['assemble']); 

カスタムヘルパーファイル/モジュールを使用していた今私はすでにハンドルヘルパーを試みたが、私は以下のいずれかを使用する必要があった後に、それは私がヘルパーファイルを持っていない:

/* 
    Custom handlebars helpers which allows to make 

    {{#is a '===' b}}} 

    {{/is}} 
*/ 

module.exports.register = function (handlebars) { 

    var isArray = function(value) { 
     return Object.prototype.toString.call(value) === '[object Array]'; 
    } 

    var ExpressionRegistry = function() { 
     this.expressions = []; 
    }; 

    ExpressionRegistry.prototype.add = function (operator, method) { 
     this.expressions[operator] = method; 
    }; 

    ExpressionRegistry.prototype.call = function (operator, left, right) { 
     if (! this.expressions.hasOwnProperty(operator)) { 
      throw new Error('Unknown operator "'+operator+'"'); 
     } 

     return this.expressions[operator](left, right); 
    }; 

    var eR = new ExpressionRegistry; 
    eR.add('not', function(left, right) { 
     return left != right; 
    }); 
    eR.add('>', function(left, right) { 
     return left > right; 
    }); 
    eR.add('<', function(left, right) { 
     return left < right; 
    }); 
    eR.add('>=', function(left, right) { 
     return left >= right; 
    }); 
    eR.add('<=', function(left, right) { 
     return left <= right; 
    }); 

    eR.add('==', function(left, right) { 
     return left == right; 
    }); 

    eR.add('===', function(left, right) { 
     return left === right; 
    }); 
    eR.add('!==', function(left, right) { 
     return left !== right; 
    }); 
    eR.add('in', function(left, right) { 
     if (! isArray(right)) { 
      right = right.split(','); 
     } 
     return right.indexOf(left) !== -1; 
    }); 

    var isHelper = function() { 
     var args = arguments 
     , left = args[0] 
     , operator = args[1] 
     , right = args[2] 
     , options = args[3] 
     ; 


     // console.log(args); 

     if (args.length == 2) { 
      options = args[1]; 
      if (left) return options.fn(this); 
      return options.inverse(this); 
     } 

     if (args.length == 3) { 
      right = args[1]; 
      options = args[2]; 
      if (left == right) return options.fn(this); 
      return options.inverse(this); 
     } 

     if (eR.call(operator, left, right)) { 
      return options.fn(this); 
     } 
     return options.inverse(this); 
    }; 

    handlebars.registerHelper('is', isHelper); 

    return eR; 
}; 

次のエラーが表示されています。登録していないようですね! 助けてください!

答えて

0

this github issueを参照するには:

isヘルパーのドキュメントがhereです。

カスタムヘルパーをインポートする方法はありますか?

これはhereと記載されています。代わりにパスを使用しての 、あなたはrequireを使用します。

// single helper (required module returns the helper function) 
app.helper('is', require('./helpers/is')); 

// multiple helpers (required module returns an object of helper functions... e.g. key/value pairs) 
app.helpers(require('./helpers')); 

上記のカスタム・ヘルパー・コードは、ヘルパーを登録するためのgrunt-assemble構文を使用しています。この場合、私はこのように見て、あなたのヘルパーを変更します:is-helperから返された関数が前に呼び出されていること

var isHelper = require(config.paths.path_src + 'partials/_helpers/is-helper')); 
app.helper('is', isHelper()); 

お知らせ:

/* 
    Custom handlebars helpers which allows to make 

    {{#is a '===' b}}} 

    {{/is}} 
*/ 

module.exports = function() { 

    var isArray = function(value) { 
     return Object.prototype.toString.call(value) === '[object Array]'; 
    } 

    var ExpressionRegistry = function() { 
     this.expressions = []; 
    }; 

    ExpressionRegistry.prototype.add = function (operator, method) { 
     this.expressions[operator] = method; 
    }; 

    ExpressionRegistry.prototype.call = function (operator, left, right) { 
     if (! this.expressions.hasOwnProperty(operator)) { 
      throw new Error('Unknown operator "'+operator+'"'); 
     } 

     return this.expressions[operator](left, right); 
    }; 

    var eR = new ExpressionRegistry; 
    eR.add('not', function(left, right) { 
     return left != right; 
    }); 
    eR.add('>', function(left, right) { 
     return left > right; 
    }); 
    eR.add('<', function(left, right) { 
     return left < right; 
    }); 
    eR.add('>=', function(left, right) { 
     return left >= right; 
    }); 
    eR.add('<=', function(left, right) { 
     return left <= right; 
    }); 

    eR.add('==', function(left, right) { 
     return left == right; 
    }); 

    eR.add('===', function(left, right) { 
     return left === right; 
    }); 
    eR.add('!==', function(left, right) { 
     return left !== right; 
    }); 
    eR.add('in', function(left, right) { 
     if (! isArray(right)) { 
      right = right.split(','); 
     } 
     return right.indexOf(left) !== -1; 
    }); 

    var isHelper = function() { 
     var args = arguments 
     , left = args[0] 
     , operator = args[1] 
     , right = args[2] 
     , options = args[3] 
     ; 


     // console.log(args); 

     if (args.length == 2) { 
      options = args[1]; 
      if (left) return options.fn(this); 
      return options.inverse(this); 
     } 

     if (args.length == 3) { 
      right = args[1]; 
      options = args[2]; 
      if (left == right) return options.fn(this); 
      return options.inverse(this); 
     } 

     if (eR.call(operator, left, right)) { 
      return options.fn(this); 
     } 
     return options.inverse(this); 
    }; 

    return isHelper; 
}; 

中にあなたが行うことでヘルパーをロードすることができます組み立てapp.helperに渡します。これにより、カスタムオプションをヘルパーに渡すことができます(たとえば、ヘルパーで使用しているカスタム式など)が、それはあなた次第です。

これが役に立ちます。

+0

私はその次のエラー を示す、あなたが私を与えた新しいフォーマットをインポートしようとしたモジュールが見つかりません「.SRC /パーシャル/ _helpersを/ヘルパーは」 私はモジュールがあり、100%確信しているが、それ登録していないようです。その非常に奇妙な.. – webkitfanz

+0

アドバイス? ... – webkitfanz

+0

これはノード 'require'エラーです。パスはアプリケーションとの関係で間違っている可能性があります...パスが実際に '.src/partials/_helpers/is-helper'であっても、ノードが相対パスを知っている前に'。/ 'を追加する必要があります'node_modules'からではありません:' ./。src/partials/_helpers/is-helper' – doowb

関連する問題