node.js - webpackでコンパイル中にprocess.envの変数を置き換えるのを禁止する方法は?
物語
私はAWS Lambda関数を開発しており、webpackを使ってコードをコンパイルしています。
いくつかの記事を読みましたが、process.env の変数はコンパイル中に自動的に置き換えられるようです。かっこいいですが、私はこの動作を禁止したいです。
なぜ?
AWS Lambdaダッシュボードを使って環境変数を渡しているからです。
Webpackの設定
const nodeExternals = require('webpack-node-externals')
const webpack = require('webpack')
const path = require('path')
module.exports = {
target: 'node',
entry: path.resolve(__dirname, 'index.ts'),
externals: [nodeExternals()],
devtool: 'inline-source-map',
mode: 'production',
module: {
rules: [{
test: /\.tsx?$/,
use: [{
loader: 'ts-loader',
options: {
experimentalWatchApi: true,
},
}],
}]
},
plugins: [],
resolve: {
extensions: ['.tsx', '.ts', '.js']
},
output: {
filename: 'index.js',
libraryTarget: 'commonjs',
path: path.resolve(__dirname, 'dist')
}
}
質問
webpack コンパイル中に process.env 変数を置き換える挙動を禁止することは可能ですか?もし可能であれば、この効果を実現する方法を教えてください。
回答 #1
optimization.nodeEnv を false に設定します
差出人:
https://webpack.js.org/configuration/optimization/#optimizationnodeenv
最適化.nodeEnv
ブール値=偽 文字列
webpack に process.env.NODE_ENV を指定した文字列の値に設定するよう指示します。optimization.nodeEnv は false に設定されていない限り DefinePlugin を使用します。optimization.nodeEnv は設定されていれば mode をデフォルトとし、設定されていなければ 'production' にフォールバックします。
回答 #2
optimization.nodeEnv を false に設定すると NODE_ENV 変数には有効ですが、すべての環境変数には有効ではなく、コンパイル後のコードで process.env が置き換えられるのを防ぐこともできません。
私はバックエンドでWebpackを使っているので、ランタイム中にアクセスできることが重要です。
コンパイルされたコードで process.env を保持する公式の方法がないようなので、私の場合はこれがうまくいった回避策を見つけました。
私は新しいグローバル変数を定義する必要があり、それを ENVIRONMENT と呼びました。この変数はコンパイル中に process.env に置き換えられます。
new webpack.DefinePlugin({
ENVIRONMENT: 'process.env',
}),
私のコードでは、それを通常のオブジェクトのようにアクセスします:
ENVIRONMENT.DATABASE_URL
上記は process.env.DATABASE_URL にコンパイルされます。
