【问题标题】:Does SailsJS support ES6?SailsJS 是否支持 ES6?
【发布时间】:2016-01-18 00:46:53
【问题描述】:

有没有办法在sails.js 中获取ES6

【问题讨论】:

    标签: javascript node.js sails.js ecmascript-6


    【解决方案1】:

    这是一个 node.js 问题,并不是特别适合。是的,当前版本的 node.js 支持某些 ES2015 标准,具体取决于您在启动服务器时使用的 Node.js 版本和标志。

    大部分功能已经启用,但是要使用所有功能,您可以在项目文件夹中使用node app.js --es_stagingnode app.js --harmony 而不是sails lift

    以下链接提供了有关当前 Node 版本支持哪些功能以及如何访问这些功能的更新信息。

    https://nodejs.org/en/docs/es6/

    【讨论】:

      【解决方案2】:

      您需要检查 ES6 与 node.js 的兼容性,而不是任何框架,如sails.js、express 等。

      因为最后 node.js 会将 javaScript 更改为服务器端代码。 因此,您使用哪个框架并不重要。

      你可以在 ES6 中使用风帆:

      对于 ES6 兼容性检查kangax.github.io

      推荐:

      Sails v 0.11.0 或更高版本

      Node v 4.. 或更高版本

      npm v 2.14.4 或更高版本

      现在您已准备好探索新的Ecmascript6 功能。

      您将从http://es6-features.org/ 获得新功能。

      测试:

      代码:

      ecma6Test:function(req,res,next){
          var evens =req.body.evens
          odds  = evens.map(v => v + 1);
          res.json({sucess:true,'odds':odds});
      }
      

      请求:

      {"evens":[2,4,6,8,10]}
      

      回应:

      {
          "sucess": true,
          "odds":[3, 5, 7, 9, 11]
      }
      

      【讨论】:

      • V8 团队认为暂存功能不稳定。但您可以通过 --harmony 标志使用它们。但我认为你必须等到它们稳定下来。
      【解决方案3】:

      毗湿奴的答案已经涵盖了。

      最新节点版本中可用的 ES6 功能的明确列表在这里https://nodejs.org/en/docs/es6/

      默认情况下 Node.js 附带了哪些 ES6 功能(不需要运行时标志)?

      • let(仅限严格模式)
      • 常量
      • 功能块(仅限严格模式)
        • 从 v8 3.31.74.1 开始,有意实现块范围声明,但对严格模式代码有不合规的限制。开发人员应注意,随着 v8 继续向 ES6 规范合规,这将发生变化。
      • 类(仅限严格模式)
      • 收藏
      • 地图
      • 弱地图
      • 设置
      • 弱集
      • 类型化数组
      • 发电机
      • 二进制和八进制文字
      • 对象字面量扩展(简写属性和方法)
      • 承诺
      • 新的字符串方法
      • 符号
      • 模板字符串
      • 箭头函数

      【讨论】:

        【解决方案4】:

        SailsJS 只是一个使用 ES5 语法编写的框架,不需要支持 ES6。

        您可以像往常一样使用 ES6 语法编写项目,并使用 Babel\Traceur\whatever 来运行。

        我的流程如下:

        • 创建 Sails 项目;
        • 安装babeldevDependencies;
        • "start": "babel-node app.js" 更新package.json 中的npm start 脚本;

        就是这样。我可以在我的 controllers\models\etc 中编写 ES6\7 代码并通过npm start 命令运行服务器。它像你用 ES5 语法编写的一样正常工作。

        Babel Transpiler

        Babel Node

        【讨论】:

        • 不幸的是,这并不容易。抛出错误:/node_modules/source-map-support/source-map-support.js:415 var hasStack = (arguments[1] && arguments[1].stack); ^ 类型错误:无法读取未定义的属性“文件名”
        【解决方案5】:

        sails-hook-babel 钩子可能对你有用。正如我在下面解释的那样,它对我不起作用,但我希望它得到更高的可见性,得到改进,然后这个答案将更加相关。

        目前,从 v6.0.1 开始,该库将适用于在sails 挂钩运行后加载的文件。这意味着如果你想在例如使用 ES2015你的config/routes.js 文件,你会得到一个语法错误。但正如this issue 中所建议的那样,它应该适用于例如api 文件夹中的文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-22
          • 2020-12-19
          • 1970-01-01
          • 1970-01-01
          • 2019-03-21
          • 1970-01-01
          相关资源
          最近更新 更多