はじめに
serverless-offline と serverless-webpack を使用しているプロジェクトで、正しくNODE_ENVが設定できませんでした。
この記事では原因と解決方法をまとめます。
困ったこと
serverless-webpack でビルドし、serverless offline を実行してもNODE_ENVが正しく設定できませんでした。
serverless.yml で以下のようにNODE_ENV=DEVを指定しているにもかかわらず、 NODE_ENV=Developmentと設定されてしまいました。
serverless.yml
.
.
.
plugins:
- serverless-webpack
- serverless-offline
provider:
name: aws
runtime: nodejs10.x
stage: DEV
region: ap-northeast-1
environment:
NODE_ENV: DEV
.
.
.原因
webpack はビルド時にNODE_ENVとDEBUGの 2 つにデフォルトの値を設定します。 (NODE_ENV=Development, DEBUG=false)
Lambda ファンクション実行時は NODE_ENV=DEV となります。
ビルド時にデフォルト値の Development が設定されるため、ビルド後のコードには NODE_ENV=Development が埋め込まれます。
そのため、実行時に正しく指定できていませんでした。
解決方法
ビルド時に NODE_ENV の値を設定することで解決できました。
webpack.config.js で EnvironmentPlugin が設定可能です。
webpack.config.js
const webpack = require("webpack");
module.exports = {
.
.
.
plugins: [new webpack.EnvironmentPlugin(slsw.lib.serverless.service.provider.environment)],
.
.
.
}(slsw.lib.serverless.service.provider.environmentは serverless.yml で定義した Environment がオブジェクト形式で取得できる)