Джейд в контексте 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, который не будет декодировать функцию. Только производная от объекта.