0

我想做一些函数来读取源 .coffee 文件,使用 CoffeeScript 解析器检查 AST(可能使用 traverseChildren 函数),更改一些节点,然后将更改后的 AST 写回目标 .coffee 文件。

这种操作的一个简单(但无用)示例是,我想在树中找到所有字符串并连接“Luis was here”。所以如果我有

console.log 'Hello, world!'

然后在我的函数通过文件后,它会生成:

console.log 'Hello, world!Luis was here'

这仍然是 CoffeeScript,而不是“编译”的 JavaScript。阅读 .coffee 并生成 .js 非常容易,但这不是我想要的。我找不到将 CoffeeScript API 用于此类任务的方法。

在此先感谢您的帮助...

4

1 回答 1

2

由于 CoffeeScript 编译器是用 CoffeeScript 编写的,因此您可以在 CoffeeScript 中使用它。编写另一个 CoffeeScript 程序来读取您的源代码,操作 AST,然后编写 JavaScript:

一个简短的例子,在 mycustom.coffee 文件中说:

fs = require 'fs'
coffee = require 'coffee-script'

generateCustom = (source, destination, callback) ->
  nodes = coffee.nodes source
  # You now have access to the AST through nodes
  # Walk the AST, modify it...
  # and then write the JavaScript via compile()
  js = nodes.compile()
  fs.writeFile destination, js, (err) ->
    if err then throw err
    callback 'Done'

destination = process.argv[3]
source = process.argv[2]
generateCustom source, destination, (report) -> console.log report

像这样调用这个程序:

> coffee mycustom.coffee source.coffee destination.js

也就是说,如果您的转换非常简单,那么您可能更容易通过操作令牌流来创建自定义重写器。

于 2014-01-25T09:21:02.457 回答