Rails资产管道与ES6模块和browserify

PaR*_*Nos 12 commonjs browserify ruby-on-rails-4 ecmascript-6

我正在尝试使用rails资产管道实现一些事情,这比我希望的更难.

为了干净地构建应用程序,我计划为javascript使用模块系统.为此,我想使用CommonJS模块,但我想使用新的ES6语法编写它们以便将来兼容.

我找到了资产管道的ES6模块转换器扩展,它运行良好,但这只能将其转换为CommonJS格式.我仍然需要将此解析为浏览器所理解的JS.为此,我正在寻找使用Browserify但我的问题在于结合这两个.

模块转换器基于每个文件工作,但browserify通过检查所需的所有文件来工作.问题是browserify不能使用原始文件,因为它们不是CommonJS格式,它们在ES6中,所以它需要转换后的版本,但是因为这发生在管道中,我不能指向浏览器化文件.

这有什么办法吗?

Iva*_*van 7

你可能会想尝试塞斯·文森特的做法,在那里他使用的package.json,并NPM脚本运行所有的JavaScript任务,并且只使用bundle.js在资产管道.然后,您可以从Rakefile中执行npm任务.我喜欢他的方法,因为它打开了JS任务的现代JS工具链.

  • 与此相关的丑陋部分是你需要3个文件(1个用于链轮,1个用于CommonJS,1个用于浏览器的输出,也就是'bundle')然后你还需要检查生成的包到源代码或覆盖所有方式启动Rails以确保生成包...即使你修复了它,你仍然有两个文件.并不可怕,我确实喜欢被孤立于RoR但需要考虑的事情. (2认同)

Cym*_*men 5

我的建议是使用browserify-rails gem.对于ES6,你可以使用transform这样的:https://github.com/thlorenz/es6ify

几个月后更新:我仍然建议使用相同的路径,但如果您可以从资产管道中获取,我强烈建议您直接访问webpack或浏览器.资产管道有一些好处,但根据我的经验,尝试使JavaScript成为一流的公民是痛苦的,它的好处大于缺点(对我来说).