search
LoginSignup
21
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

webpacker の check_yarn_integrity オプションについて調べてみた

はじめに

Rails アプリで webpacker を利用するケースが増えていると思います。Rails 5.1以上のアプリでは、rails new myapp --webpack というオプションをつける形でも webpacker をインストールできるようになっていますよね。

しかし個人的に、使い方を理解しきれていないことが多いです。そこで理解するためのとっかかりとして、config/webpacker.yml のオプションを調べてみようと思い、その中の check_yarn_integrity というオプションについて手始めに調べてみました。

何をするオプションなのか

webpacker の README を抜粋します。

By default, in development, webpacker runs a yarn integrity check to ensure that all local JavaScript packages are up-to-date.
This is similar to what bundler does currently in Rails, but for JavaScript packages.
If your system is out of date, then Rails will not initialize.
You will be asked to upgrade your local JavaScript packages by running yarn install.

こちらを意訳してみました。

  • development 環境では、ローカルの全ての JavaScript パッケージが最新であるかを yarn integrity check する
  • Rails の bundler がやっていることと似てるが、これは JavaScript 用
  • システムが古くなっていると、Rails は初期化されない
  • yarn install でローカルの JavaScript パッケージをアップグレードするか尋ねられるようになる

実施していること

実際関連しているコード部分を抜粋すると以下になります。

config.webpacker.check_yarn_integrity = true にしておけば、rails crails s といった Rails アプリケーションを起動する際の初期化時に、 yarn check --integrity を実行し、エラーが出たら以下のようなエラーメッセージを出力してくれるようです。

========================================
  Your Yarn packages are out of date!
  Please run `yarn install` to update.
========================================


To disable this check, please add `config.webpacker.check_yarn_integrity = false`
to your Rails development config file (config/environments/development.rb).

不要な場合は config.webpacker.check_yarn_integrity = false にすれば OK のようです。
パッケージが古くなっていたらエラーで知らせてくれるということなので、パッケージを最新の状態に保つ手助けになりそうですね。

おわりに

JavaScript のパッケージ管理は複雑で理解が難しいですね。根気よく学習していきたいと思います。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
21
Help us understand the problem. What are the problem?