esprima→escodegenで元のソースに復元されるか試してみた
escodegenを触ったことがなかったので試してみました。
変換コード
元のファイル(original.js
)
'use strict'; var fs = require('fs'); var esprima = require('esprima'); var escodegen = require('escodegen'); var original = fs.readFileSync('./original.js', 'utf8'); var ast = esprima.parse(original, { range: true, tokens: true, comment: true, }); ast = escodegen.attachComments(ast, ast.comments, ast.tokens); var generated = escodegen.generate(ast, { comment: true, sourceCode: original, format: { preserveBlankLines: true, } }); fs.writeFileSync('generated.js', generated, 'utf8'); // コメント setTimeout(function() { console.log('aaa'); }, 1000);
変換後(generated.js
)
npm i -g escodegen esprima node original.js
'use strict'; var fs = require('fs'); var esprima = require('esprima'); var escodegen = require('escodegen'); var original = fs.readFileSync('./original.js', 'utf8'); var ast = esprima.parse(original, { range: true, tokens: true, comment: true }); ast = escodegen.attachComments(ast, ast.comments, ast.tokens); var generated = escodegen.generate(ast, { comment: true, sourceCode: original, format: { preserveBlankLines: true } }); fs.writeFileSync('generated.js', generated, 'utf8'); // コメント setTimeout(function () { console.log('aaa'); }, 1000);
結果
ほぼ、同じに見えますが、ケツカンマとか、無名関数の()
のスペースとか微妙に変わっています。
続く
時間がないので、今日はここまで。多分続く。