ウェブサイト検索

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 にコンパイルされます。

関連記事