serverless-webpackでNODE_ENVを設定する
はじめに
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で設定が可能です。
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がオブジェクト形式で取得できます)