如何用babel转换*表达式*?

时间:2017-01-05 19:28:55

标签: babeljs

鉴于以下内容:

require('babel-core').transform('3').code

有没有办法让它返回3(表达式)而不是3;(声明)?

我试过了:

  • 在网页和各个网站上搜索“babel表达”,“babel transile expression'”等。
  • 传递(3),但也转换为3;
  • 戳了一下巴贝尔的内部因素,弄清楚发生了什么,但我不太清楚如何解决这个问题。
  • 传递选项minified: true,声称会删除尾随的分号但实际上似乎没有做任何事情。

现在我正在使用.replace(/;$/, '')正常工作但似乎很荒谬且容易出错。

1 个答案:

答案 0 :(得分:4)

@loganfsmyth在BabelJS.slack - parserOpts.allowReturnOutsideFunction上提供了缺失的链接。这是我提出的代码:

const babel = require('babel-core');

let script = 'return ((selector, callback) => Array.prototype.map.call(document.querySelectorAll(selector), callback))("#main table a.companylist",a => a.innerText)';

let transform = babel.transform(script, {
    ast: false,
    code: true,
    comments: false,
    compact: true,
    minified: true,
    presets: [
        ['env', {
            targets: {
                browsers: ['> 1%', 'last 2 Firefox versions', 'last 2 Chrome versions', 'last 2 Edge versions', 'last 2 Safari versions', 'Firefox ESR', 'IE >= 8'],
            }
        }]
    ],
    parserOpts: {
        allowReturnOutsideFunction: true,
    }
});

let code = `return function(){${transform.code}}()`;

输出:

return function(){"use strict";return function(selector,callback){return Array.prototype.map.call(document.querySelectorAll(selector),callback)}("#main table a.companylist",function(a){return a.innerText});}()

我的输入脚本看起来有点滑稽,因为我是如何生成它的,但你可以看到它将这些箭头表达式转换为常规函数,整个事情仍然是一个表达式。

N.B。您可能希望将最后一行修改为类似

的内容
let code = `(function(){${transform.code}})()`;

取决于您的需求。我需要我return编辑。