EnvironmentPlugin
は、DefinePlugin
をprocess.env
キーで使用するための簡略記法です。
EnvironmentPlugin
は、キーの配列またはキーをデフォルト値にマッピングするオブジェクトのいずれかを受け入れます。
new webpack.EnvironmentPlugin(['NODE_ENV', 'DEBUG']);
これは、次のDefinePlugin
アプリケーションと同等です。
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.DEBUG': JSON.stringify(process.env.DEBUG),
});
あるいは、EnvironmentPlugin
は、キーをデフォルト値にマッピングするオブジェクトをサポートします。キーがprocess.env
で未定義の場合、そのキーのデフォルト値が使用されます。
new webpack.EnvironmentPlugin({
NODE_ENV: 'development', // use 'development' unless process.env.NODE_ENV is defined
DEBUG: false,
});
例
テストファイルentry.js
で前のEnvironmentPlugin
設定を実行したときの結果を調べてみましょう。
if (process.env.NODE_ENV === 'production') {
console.log('Welcome to production');
}
if (process.env.DEBUG) {
console.log('Debugging output');
}
ターミナルでNODE_ENV=production webpack
を実行してビルドすると、entry.js
は次のようになります。
if ('production' === 'production') {
// <-- 'production' from NODE_ENV is taken
console.log('Welcome to production');
}
if (false) {
// <-- default value is taken
console.log('Debugging output');
}
DEBUG=false webpack
を実行すると、次のようになります。
if ('development' === 'production') {
// <-- default value is taken
console.log('Welcome to production');
}
if ('false') {
// <-- 'false' from DEBUG is taken
console.log('Debugging output');
}
以下のEnvironmentPlugin
設定により、リポジトリの最新のGitコミットに対応するprocess.env.GIT_VERSION
(例:"v5.4.0-2-g25139f57f")とprocess.env.GIT_AUTHOR_DATE
(例:"2020-11-04T12:25:16+01:00")が提供されます。
const child_process = require('child_process');
function git(command) {
return child_process.execSync(`git ${command}`, { encoding: 'utf8' }).trim();
}
new webpack.EnvironmentPlugin({
GIT_VERSION: git('describe --always'),
GIT_AUTHOR_DATE: git('log -1 --format=%aI'),
});
サードパーティ製のDotenvPlugin
(dotenv-webpack
)を使用すると、dotenv変数の(一部を)公開できます。
// .env
DB_HOST=127.0.0.1
DB_PASS=foobar
S3_API=mysecretkey
new Dotenv({
path: './.env', // Path to .env file (this is the default)
safe: true, // load .env.example (defaults to "false" which does not use dotenv-safe)
});