看了一下 guides,好像找不到webpacker 的用法,估计还是需要到 github 中看。
webpacke
可是不太懂,为什么新建一个项目,gem 里没有webpacker,却把package.json带上呢?
webpacker
package.json
难道说,不需要webpacker就可以把 js 的相关东西放在package.json里吗?可是找了文档却没有看到。还是说有别的用意呢?
引入了 yarn,可以通过 assets pipeline 编译。
yarn 可以替代过去把前端的依赖放到 vendor 的作用
因为现在的 Rails 项目是 Ruby 和 Node.js 的合体
主要还是因为 Assets Pipeline 没能够打动前端圈子,最终 Rails 决定向前端社区妥协,按照他们的风格办事,其中 yarn 是最符合 DHH 口味的(其实 yarn 可以理解成“更好的”npm,依赖声明 package.json 也是复用 npm 的,并且 yarn 的主力开发 Yehuda Katz 还曾是 Rails core team 成员)。
对于 Rails 项目来说,集成一个前端框架的最好的方式是引入对应的 gem,比如 jquery-rails font-awesome-sass bootstrap-sass 这些 gem 按照 Assets Pipeline 的最佳实践原则组织文件,提供 helper,并且可以对 AP 做一些 tweak(比如 font-awesome 自动把他的 fonts 文件加入到预编译的列表里,调整 CSS 编译器和 JS 压缩器的参数等)
但是,前端的库层出不穷,只有极少数的前端项目接纳了 Assets Pipeline,面对没有接纳 AP 的项目,只能拉下他们的代码,放入到 vendor 目录,这是很土很落后的做法了。
Rails 在正式把 yarn 加入套餐前,社区里就有很多种方案了,npm-rails bower-rails 等,Rails 集成 yarn,算是提出了官方的前端依赖管理的解决方案,把法(AP)外之地的管理现代化。
至于 webpacker,他算是复用了这部分基础设施而已
现在网上大多数的文章都是 5.1 版本以后,一谈到 yarn,就必须把 webpacker 一起说。其实 5.1 版本后,加入了 yarn,主要目的就是去掉以前为了找一个 js 或者 css 包时,想尽办法找到这个包的 gem(我就是试过,强迫症 )。实在找不到了,怎么办,那就弄到 vendor 里了。
所以现在的做法就是:
yarn add jquery
application.js
#= require jquery/dist/jquery
从此就不在需要强迫症的去找 gem 了。