什么';在Rails中使用ES6语法和Javascript简化是一种简单、受支持、稳定的方式吗?

什么';在Rails中使用ES6语法和Javascript简化是一种简单、受支持、稳定的方式吗?,javascript,ruby-on-rails,webpack,ecmascript-6,babeljs,Javascript,Ruby On Rails,Webpack,Ecmascript 6,Babeljs,我正在一个Rails项目中尝试在Javascript文件中使用ES6语法。出于性能方面的原因,我还需要缩小Javascript文件(我的,以及像rails-ujs这样的库所包含的文件) 当我第一次生成项目并在本地运行时,它运行得很好。但是,这是因为开发与生产的环境配置不同。在开发配置中,没有缩小。在production配置中,Uglifier用于缩小Javascript 一旦我尝试部署到生产环境中,Uglifier和ExecJS就开始抛出各种语法错误,比如不识别const关键字,或者不识别箭头函

我正在一个Rails项目中尝试在Javascript文件中使用ES6语法。出于性能方面的原因,我还需要缩小Javascript文件(我的,以及像
rails-ujs
这样的库所包含的文件)

当我第一次生成项目并在本地运行时,它运行得很好。但是,这是因为
开发
生产
的环境配置不同。在
开发
配置中,没有缩小。在
production
配置中,Uglifier用于缩小Javascript

一旦我尝试部署到生产环境中,Uglifier和ExecJS就开始抛出各种语法错误,比如不识别
const
关键字,或者不识别箭头函数的
=>
操作符中的

在花了几个小时寻找修复程序后,我求助于简单地禁用Uglifier,以便能够成功部署。然而,现在我的网站正在生产和工作,我想让这个优化工作

我熟悉Babel和Webpack,我在其他项目中使用过它们(以及一些自定义脚本),以生成浏览器就绪的ES5代码(用于Internet Explorer)和浏览器就绪的ES6代码(用于其他所有浏览器)。如果我没有使用Rails,这对我来说将是微不足道的问题

但是,因为我使用的是Rails,所以我需要在Rails资产管道的上下文中找出如何做到这一点。令人惊讶的是,尽管ES6已经有4年的历史,并且受到所有现代浏览器的支持,但似乎并没有任何标准的方法来做到这一点。微软Edge在这一点上远远领先于Rails,这真的很奇怪

以下是我看到的一些建议,以及其中的问题

    • 没有说明如何在Rails资产管道中使用它的文档
    • 默认情况下包含在Rails中,但不支持ES6语法
    • 提到“实验性ES6语法支持”,但它不起作用,即使启用“和谐模式”
    • 它使用了“实验”这个词,我正试图在一个生产应用程序中使用它。任何严肃的Javascript工具现在都应该对ES6有稳定的支持
    • 文档不清楚,包括很多关于必须在所有导入上执行奇怪的非标准操作的警告,如调用
      .default()
    • 提到必须使用链轮的“预释放版本”。我正试图在一个生产应用程序中使用它,我不认为我不合理,因为我希望能够用稳定版本的库来实现这一点。这篇文章已经3年了,但我找不到更新的版本了
    • 有一些建议,但没有一个是自成体系的解决方案,这已经快3年了。我希望现在有一个具体的,稳定的方法来做这件事
    • 如果我必须在Rails资产管道之外完成所有ES6支持,那么我会这么做。当然,有一种方法可以做到这一点,而无需跳出Rails并手动编译Javascript代码
    • 仍处于测试阶段。我正试着把它用于生产现场

您使用的Rails版本是什么?你看过我使用的Rails 5.2了吗。有人告诉我Rails 6(5天前发布)内置了Webpacker,所以我正在探索这一点。看起来你应该能够在你的Rails版本中使用它。通过这种方式,你可以通过Webpacker运行所有的JS,如果你愿意的话,也可以通过Sprocket或webpack运行样式。我已经尝试了
config.assets.JS_compressor=Uglifier.new(harmony:true)
和另一种语法,你只需在一个地方执行
{harmony:true}
。这两种语法都没有任何明显的效果。