ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

thumbnail

Labels:  JavaScript, ツール/ライブラリ 投稿者:mori-dev

Webpack で git 管理してもよいような環境ごとに値の異なる定数を設定する方法

です。仕事でのちょっとしたコミットをブログ記事化するシリーズです。今日は Webpack の話題です。

課題

環境ごとに値の異なる定数として、git で管理できるものと git で管理すべきではないものがあります。後者は dotenvWebpack の DefinePlugin で実現できます。git で管理してよいような、環境ごとに値の異なる定数はどう扱えばよいのでしょうか。

答案

webpack-merge で環境ごとに設定ファイルを分離して、Webpack の DefinePlugin と組み合わせてみました。webpack-merge の smartStrategy で plugins 欄の扱いをコントロールします。

production 環境でだけ違う値を使いたい場合は、webpack.config.base.js の値を webpack.config.production.js の値で上書きできるように設定した上で、webpack.config.base.js でデフォルト値を指定して、webpack.config.browser.production.js で production 用の値を指定します。以下は webpack.config.browser.production.js の例です。

const config = merge.smartStrategy({
plugins: ‘prepend’ // DefinePlugin の base の値を上書きできるようにする
})(baseConfig, {優先される設定})

module.exports = config;

補足

flowtype 対策が必要かもしれません。たとえば APP.HOGE という定数だとすると、decls/my_app_types.js に `declare var APP: Object;` と記述します。
eslint 対策が必要かもしれません。たとえば APP.HOGE という定数だとすると、.eslintrc.yaml に以下のように記述します。ワードプレスの引用記法では、インデントが崩れている点はご注意下さい。

globals:
APP: true

テストが落ちないようにする必要もあります。たとえば APP.HOGE という定数だとすると、 test/util/global.js に以下のように書いた上で、

global.APP = {
‘HOGE’: ‘3000’,
}
export default global;

次のように呼び出しておきます。

/* eslint-disable no-unused-vars */
import global from ‘../util/global’;

環境

  • webpack v2.3.3
  • webpack-merge v4.1.0

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。

PHPエンジニア
Rubyエンジニア
フロントエンドエンジニア
インフラエンジニア
新卒エンジニア
その他採用情報

関連記事

thumbnail
バーンダウンチャートでISSUEやPRを可視化

この記事はランサーズ Advent Calendar 2016の23日目です。 昨日夜の暴風雨で家が少し揺れたりして危機感を感じたプロダクト開発部のakin.です。 今年のAdvent Calendarも今日を含めあと3日! 今回は弊社Advent Calen …

チャットワークをもっと使いやすくする拡張機能を作った

こんにちはエンジニアの上野です。 2016年のAdventCalendar も残すところあと僅か! 12/5の投稿(githubのissue, pull request 検索をハックする!)に引き続き、今日はチャットワークの拡張プラグインのご紹介です。エンジニ …

5分で完了!Webサイトに簡単にチュートリアルが作れるIntro.jsの使い方

こんにちは! ランサーズ株式会社の開発部でエンジニアをしております、神庭(かんば)です。 最近、SEOが楽しくて仕方がないお年頃です!   先日、サービスの操作説明をするために、操作マニュアル(チュートリアル)ようなものを作りたいって要望があり、少し …