WebpackのDefinePluginで環境変数を定義する

webpackのDefinePluginでグローバル環境変数が定義できる。

new webpack.DefinePlugin({
  // Definitions...
});

コンパイル時直接テキスト置換でインラインかされるので、文字列の値を定義したい場合、実際のクォーテーションを含める必要がある1

Note that because the plugin does a direct text replacement, the value given to it must include actual quotes inside of the string itself. Typically, this is done either with alternate quotes, such as ‘“production”’, or by using JSON.stringify(‘production’).

new webpack.DefinePlugin({
  PRODUCTION: JSON.stringify(true), // true
  BROWSER_SUPPORTS_HTML5: true, // true
  VERSION: JSON.stringify('5fa3b9'), // '5fa3b9'
  'SERVICE_URL': 'https://dev.example.com', // highly possible to recieve a compile error
  'typeof window': '"object"',
  TWO: '1+1', // 2
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
});

ランタイム値も可能

With Typescript

Typescriptコンパイラも認識できるように、declare定義が必要2

// some.d.ts
declare var PRODUCTION: boolean;
declare var VERSION: string;

With Jest

jest.config.jsに再定義が必要らしい3

"jest": {
    "globals": {
      "PRODUCTION": true
    }
  }
comments powered by Disqus