【问题标题】:Babel do not convert to ES5 if NodeJS is supported如果支持 NodeJS,Babel 不会转换为 ES5
【发布时间】:2017-02-02 05:14:13
【问题描述】:

英语不是我的母语,请原谅输入错误。

NodeJS LTS 现在 4.x 和 6.x,这是 ES6 语法的一部分,仅在 6.x 中受支持,node.green。

我有一个后端 Node 项目现在需要支持 Node 4.x 版本,但我必须使用一些仅适用于 6.x 版本的语法。所以我用preset-es2015 介绍了 Babel。但是有了这个预设,Babel 就从 ES6 转换成了 ES5。

ES6的部分语法,如const、let的性能要高于var(这是个假设,实际情况肯定没那么简单)。

我的代码在 99% 的 Node 6.x 或 57% 的 Node 4.x 上运行在 ES6 支持上,确实不需要将所有代码降级到 ES5。

所以我想知道如果支持 NodeJS,如何让 Babel 不将 ES6 语法转换为 ES5。

另外,Babel 是否支持检测当前运行环境的代码支持并智能转换?

谢谢。

更新:babel-preset-env 是我想要的。

【问题讨论】:

    标签: node.js babeljs


    【解决方案1】:

    babel-preset-env 允许您定位特定的节点(或浏览器)版本。 IE。该版本支持的功能不会被转译。示例:

    {
      "presets": [
        ["env", {
          "targets": {
            "node": 4
          }
        }]
      ]
    }
    

    另外,Babel 是否支持检测当前运行环境的代码支持并智能转换?

    转译通常是离线的,在代码在目标环境中执行之前,所以这是不可能的。

    【讨论】:

    • 感谢您的回答。 babel-preset-env 是我想要的。我有测试,它工作正常。谢谢。
    【解决方案2】:

    如果你想将 ES6 编译成 ES5,你需要安装 Babel ES2015 预设。

    npm install babel-preset-es2015
    

    然后您需要启用此预设。启用 ES6 到 ES5 编译的一种方法是使用 babel-loader 查询字符串:

      module: {
        loaders: [
          {
            test: /\.js$/,
            loader: 'babel-loader?presets[]=es2015'
          }
        ]
      }
    

    或查询选项:

      module: {
        loaders: [
          {
            test: /\.js$/,
            loader: 'babel-loader',
            query: {
              presets: ['es2015']
            }
          }
        ]
      }
    

    【讨论】:

    • 感谢您的回答。但我已经使用preset-es2015 并且不想 Babel 将所有代码转换为 ES5。
    • 是什么让你认为 OP 正在使用 webpack?您至少应该提到您的示例是针对 webpack 的。
    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2021-12-18
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多