很简单,我在execjs中从jade-lang文件运行已编译的jade.js时遇到了麻烦。
如果我在一个html文件中包含jade.js
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
知道我哪里出错了吗?我已经搜索了堆栈溢出,甚至找到了一些像我一样的方式执行此操作的宝石,但是当我在我的系统上执行时,它不起作用。我尝试使用therubyracer和node作为我的execjs运行时。
感谢您的帮助!
答案 0 :(得分:0)
似乎当execjs的返回是一个函数时,它返回nil。所以:
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"
这是有道理的,因为execjs/external_runtime.rb的extract_result方法(截至本文撰写时第62行)使用JSON.decode,它不会解码函数。只是对象的衍生物。