Джейд в контексте ExecJS

Очень просто, у меня проблемы с запуском скомпилированного файла jade.js из файла jade-lang в execjs.

Если я включу jade.js в HTML-файл

jade.compile

возвращает функцию.

Когда я делаю следующее:

require 'execjs'

source  = <<-src
  var window = {};
  #{open('jade.js').read}
  var jade = window.jade;
src
context = ExecJS.compile source
context.eval "jade.compile"
 => nil

ноль возвращается eval.

Есть идеи, где я иду не так? Я искал переполнение стека и даже нашел несколько гемов, которые делают это так же, как я, но когда я выполняю в своей системе, это не работает. Я пытался использовать therubyracer и node в качестве моих исполняемых файлов execjs.

Спасибо за вашу помощь!

1 ответ

Похоже, что когда возврат из execjs является функцией, он возвращает ноль. Так:

context.eval "jade.compile.toString()"
=> "function....."

Likewile

context.eval "jade.compile(#{template.to_json}).toString()"
=> "function...."

а также

context.eval "jade.compile(#{template.to_json})()"
=> "some html"

Это имеет смысл, поскольку метод extract_result файла execjs / external_runtime.rb (строка 62 на момент написания статьи) использует JSON.decode, который не будет декодировать функцию. Только производная от объекта.

Другие вопросы по тегам