0

我在 Ant 构建过程中使用 Rhino 来捆绑和缩小 JavaScript。除此之外,我还想预编译客户端模板,即将它们从标记编译为 JavaScript。乍一看,我认为 Rhino 的 serialize() 方法可以做到这一点,但事实并非如此。

// Load templating engine
load( "engine.js" );

// Read template file
var template = readFile( "foo.template" ),

// Compile template
compiled = engine.compile( template );

// Write compiled template to file
serialize( compiled, "compiledFoo.js" );

这将导致写入二进制文件。我想要的是一个包含已编译模板的文本文件。

如果使用 serialize() 不是答案,那是什么?因为是 Rhino,所以也可以导入 Java 类。副手,我想不出办法。

我知道这可以在 Node 中完成,但我现在无法将构建过程从 Ant-Rhino 迁移到 Grunt-Node。

4

2 回答 2

2

在我寻找答案的过程中,我发现了这样一个事实:Rhino 的 C/C++ 姐妹 SpiderMonkey 有一个uneval()函数,你可以猜到它的作用与 JavaScript 的eval()函数相反。后来又谷歌一搜,发现Rhinouneval()是在1.5R5中实现的。这可能是唯一提到 Rhino 具有此功能(或没有)的文档。

话虽这么说,这里是解决方案:

// Load the templating engine
load( "engine.js" );

// Read the template file
var template = readFile( "foo.template" ),

// Compile the template markup to JavaScript
compiled = engine.compile( template ),

// Un-evaluate the compiled template to text
code = uneval( compiled ),

// Create the file for the code
out = new java.io.FileWriter( "foo.js" );

// Write the code to the file
out.write( code, 0, code.length );
out.flush();
out.close();

quit();
于 2012-06-26T18:20:24.187 回答
0

在 javascript 中编写一个可以从 Java 调用的函数,该函数将您需要的值作为字符串返回。

于 2012-06-22T20:21:40.233 回答