NodeJS 如何在webpack编译时禁止替换process.env变量?

soat7uwm  于 2023-05-06  发布在  Node.js
关注(0)|答案(5)|浏览(286)

故事

我正在开发AWS Lambda函数,并使用webpack编译代码。
我读过一些文章,似乎process.env变量在编译过程中会自动替换。虽然这很酷,但我想禁止这种行为。
为什么
因为我正在使用AWS Lambda Jmeter 板传递环境变量。

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变量的行为?如果是的话,请帮助我达到这个效果。

uyto3xhc

uyto3xhc1#

optimization.nodeEnv设置为false
出发地:
https://webpack.js.org/configuration/optimization/#optimizationnodeenv
optimization.nodeEnv
boolean = false字符串
告诉webpack将process.env.NODE_ENV设置为给定的字符串值。nodeEnv〉使用DefinePlugin,除非设置为false。nodeEnv默认为mode,〉else福尔斯到'production'。

tvz2xvvm

tvz2xvvm2#

虽然将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

yzuktlbb

yzuktlbb3#

我遇到了同样的问题,webpack在构建时替换了process.env变量。对于SSR应用程序,这不是想要的行为。
作为一种变通方法,我在代码中使用了这样的东西来欺骗webpack:
process['e' + 'nv'].MY_VARIABLE

hyrbngr7

hyrbngr74#

我可以在vue.config.js中通过添加以下内容来避免这种行为:

const Config = require('webpack-chain');
const config = new Config();
module.exports = {
  chainWebpack: config => {
    config.plugins.delete("define")
  },
  configureWebpack: {
  ...,
  },
  .....
}
js4nwp54

js4nwp545#

Webpack配置中的mode option允许替换process.env.NODE_ENV
发展
在DefinePlugin上设置process.env.NODE_ENV以评估开发。启用NamedChunksPlugin和NamedModulesPlugin。
生产
在DefinePlugin上设置process.env.NODE_ENV以评估生产。启用FlagDependencyUsagePlugin、FlagIncludedChunksPlugin、ModuleConcatenationPlugin、NoEmitOnErrorsPlugin、OccurrenceOrderPlugin、SideEffectsFlagPlugin和TerserPlugin。

选择退出任何默认优化选项
webpack -p CLI选项也是如此。
如果DefinePluginprocess.env.NODE_ENV的影响不理想,则应在没有DefinePlugin的情况下应用列出的插件,如文档中针对productiondevelopment模式所示。
对于除了NODE_ENV之外没有环境变量的配置,this answer可能是合适的。

**这适用于自定义配置与问题中提供的配置类似的Webpack 4。这可能与其他Webpack版本或提供自己的Webpack配置的工具(如Vue CLI和Create React App)不同。

相关问题