return through.obj(function (file, enc, cb) { if (file.isNull()) { this.push(file); return cb(); } if (file.isStream()) { this.emit('error', new gutil.PluginError('gulp-traceur', 'Streaming not supported')); return cb(); } var ret; var fileOptions = objectAssign({}, options); fileOptions.filename = file.relative; fileOptions.moduleName = gutil.replaceExtension(file.relative, ''); if (file.sourceMap) { fileOptions.sourceMaps = true; } try { ret = traceur.compile(file.contents.toString(), fileOptions); if (ret.js) { file.contents = new Buffer(ret.js); } if (ret.generatedSourceMap && file.sourceMap) { applySourceMap(file, ret.generatedSourceMap); } } catch (err) { this.emit('error', new gutil.PluginError('gulp-traceur', err, { fileName: file.path })); } if (ret.errors.length > 0) { this.emit('error', new gutil.PluginError('gulp-traceur', '\n' + ret.errors.join('\n'), { fileName: file.path, showStack: false })); } this.push(file); cb(); });
return through.obj(function (file, enc, cb) { if (file.isNull()) { this.push(file); return cb(); } if (file.isStream()) { this.emit('error', new gutil.PluginError('gulp-traceur', 'Streaming not supported')); return cb(); } var ret; options = options || {}; options.filename = path.basename(file.path); try { ret = traceur.compile(file.contents.toString(), options); if (ret.js) { if (ret.sourceMap) { ret.js += '\n//# sourceMappingURL=' + options.filename + '.map'; } file.contents = new Buffer(ret.js); } if (ret.sourceMap) { this.push(new gutil.File({ cwd: file.cwd, base: file.base, path: file.path + '.map', contents: new Buffer(ret.sourceMap) })); } } catch (err) { this.emit('error', new gutil.PluginError('gulp-traceur', err)); } if (ret.errors.length > 0) { this.emit('error', new gutil.PluginError('gulp-traceur', '\n' + ret.errors.join('\n'))); } this.push(file); cb(); });
manifest.forEach(function(file) { var distPath = path.join(distRoot, file); mkdirp.sync(path.dirname(distPath)); var originalFile = path.join(root, file); var originalSource = fs.readFileSync(originalFile, "utf8"); var originalFilePath = path.relative(distRoot, originalFile); var sourceMapGenerator = new traceur.outputgeneration.SourceMapGenerator({ file: originalFile, }); var compileOpts = config.options || {}; compileOpts.sourceMaps = "inline"; var compiledSource = traceur.compile(originalSource, compileOpts, originalFilePath); fs.writeFileSync(distPath, compiledSource, "utf8"); });
function transform (dir, contents) { var imports = []; contents = contents.replace(IMPORT_RE, function (match, obj, includePath) { if (!MODULE_LOCATIONS[includePath]) { imports.push(match); return ''; } var inlineFilePath = path.join(dir, MODULE_LOCATIONS[includePath]); console.log(dir, inlineFilePath); if (inlineFilePath.substr(-3) !== '.js') { inlineFilePath += '.js'; } return 'var ' + obj + '=' + inlineModule(inlineFilePath) + ';'; }); var services = imports.map(getParts).map(serviceify); contents = traceur.compile(contents, TRACEUR_OPTS); return detraceurify(unwrapify(contents, services)); }
return Promise.all(treeNames.map(function(name) { var load = tree[name]; if (load.metadata.build == false) { return; } else if (load.metadata.format == 'es6') { var result = traceur.compile(load.source, { moduleName: load.name, modules: 'instantiate' }); concatOutput.push(result.js); } else if (load.metadata.format == 'register') { return registerCompiler.compile(load, loader).then(function(result) { concatOutput.push(result.source); }); } else if (load.metadata.format == 'amd') { return amdCompiler.compile(load, loader).then(function(result) { concatOutput.push(result.source); }); } else if (load.metadata.format == 'cjs') { return cjsCompiler.compile(load, loader).then(function(result) { concatOutput.push(result.source); }); } else if (load.metadata.format == 'global') { return globalCompiler.compile(load, loader).then(function(result) { concatOutput.push(result.source); }); } else { throw "unknown format " + load.metadata.format; } }))
var traceur = require("traceur"); var fs = require("fs"); var INFILE = './templateStrings.js'; var OUTFILE = './tc/templateStrings.js'; var result = traceur.compile(fs.readFileSync(INFILE, { encoding: "utf8" }), { filename: INFILE, modules: "inline" }); if (result.errors && result.errors.length > 0) { console.log(result); } console.log(traceur.RUNTIME_PATH); fs.writeFileSync(OUTFILE, fs.readFileSync(traceur.RUNTIME_PATH, { encoding: "utf8" }) + "\n\n" + result.js, { encoding: "utf8" });
compile: function (code, filename) { return traceur.compile(code, { modules: "commonjs", experimental: true }); }
{ name: 'traceur', fn: function() { return traceur.compile(input, { }); } },
/* Node.js环境的用法 */ var config = { input: 'calc.js', output: 'output.js' }; var traceur = require('traceur'); var fs = require('fs'); // 将ES6脚本转为字符串 var contents = fs.readFileSync(config.input).toString(); var result = traceur.compile(contents, { filename: config.input, sourceMap: true, // 其他设置 modules: 'commonjs' }); if (result.error) { throw result.error; } // result对象的js属性就是转换后的ES5代码 fs.writeFileSync(config.output, result.js); // sourceMap属性对应map文件 fs.writeFileSync(config.output + '.map', result.sourceMap);
var traceur = require('traceur'); var fs = require('fs'); var contents = fs.readFileSync('calc.js').toString(); var result = traceur.compile(contents, { filename: 'calc.js', sourceMap: true, modules: 'commonjs' }); if (result.error) { throw result.error; } fs.writeFileSync('out.js', result.js); fs.writeFileSync('out.js.map', result.sourceMap);