とみゾウ

概要だけ把握してコピペでプログラミングしたい

【Rails5.1 Webpacker】importを絶対パスで書きたい(相対パス地獄を回避)

つらいと思っていること

やりたいこと

以下のように自分のファイルからの相対パスじゃなく、特定のディレクトリからのパスでファイルのimportをしたい 。

app  
│─ javascript  
│   │─ common/  
│   │   - hoge_common.jsx  
│   │─ fugaproject/  
│   │   - fuga.jsx  
│   │─ packs/  
・fuga.jsx
// ↓こんな書き方じゃなく、
import hoge from '../common/hoge_common'
// ↓こんな書き方をしたい
import hoge from 'common/hoge_common'

解決策

config/webpacker.ymlのresolved_pathsを指定する。
これで'app/javascript'からのパスでimportを書ける。

default: &default
  source_path: app/javascript
  source_entry_path: packs
  public_output_path: packs
  cache_path: tmp/cache/webpacker
  resolved_paths: ['app/javascript'] # ★これを指定

おまけ

私は基本的にRubyMineを使って開発しているが、上記設定をするとコードジャンプが効かなくなって開発効率が落ちる。
RubyMineに「app/javascriptからのファイルも見てね」と知らせするために以下を設定しておくと良い。
(他のツールで開発している場合でも同様の設定を行えば良いはず)

↓ツールに読み込ませる用のファイルを作っておいて・・・

・dummy_webpack_config.js
const path = require('path');

// rubymineでコードジャンプできるようにパス指定
module.exports = {
  resolve: {
    modules: [
      path.resolve('app/javascript'),
    ],
  },
};

↓以下のようにpreferencesのLanguages & Frameworks > Javascript > Webpackに設定ファイルを指定する。 これでコードジャンプできるようになるはず。

f:id:k-tomoo:20180312161948p:plain