这是 Cirru 项目相干的代码, 就是把 Cirru 代码变换成 JavaScript 代码
当前版本的 CirruScript 用的是手工转化, 代码是比较乱的, 虽然也比较有用..
个中, SourceMap 支撑致使代码的复杂性难以下降,
而且, 实际上我当前写的几个项目都是没有开启 SourceMap, 由于提拔并不显著
另一个原因是 CirruScript 代码和 JavaScript 几乎是对应的,
在 Webpack 对一切文件都打包的前提下, 检察 js 源代码很正常, 也不容易调试原文件
综上, 我最先斟酌继承本来一个 Scirpus 项目, 基于 JavaScript AST 编译 Cirru
而且在将来版本的重构中我会去掉 CirruScript 的 SourceMap 支撑
重要的道理参考下边三个链接即可:
https://speakerdeck.com/constellation/escodegen-and-esmangle-using-moz…
http://esprima.org/demo/parse.html
https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
个中与 escodegen 相干的代码是如许的, 个中包含了天生 SourceMap 所需的参数:
coffee
fs = require 'fs' escodegen = require 'escodegen' exports.write = (info, ast) -> opts = sourceMap: info.relativePath sourceMapRoot: info.base sourceMapWithCode: yes {code, map} = escodegen.generate ast, opts <-- 传入 AST 和选项, 挪用即可 jsonMap = JSON.stringify map, null, 2 code += "\n//# sourceMappingURL=./#{info.mapFile}" fs.writeFileSync info.jsPath, code fs.writeFileSync info.mapPath, jsonMap
详细代码我应该是在官方堆栈的示例当中抄的:
https://github.com/estools/escodegen/blob/master/test/source-map.js
烦琐一下近来看 LLVM, 跟编译 JavaScript 做了一些对照..
(还不熟习)然则看汇编的效果, 觉得那确实是 SourceMap 的用武之地
JS 语法在语义方面照样很靠近人类浏览习气的, 包含 Cirru 也是, 差异已异常小了