故事
我正在开发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
变量的行为?如果是的话,请帮助我达到这个效果。
5条答案
按热度按时间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'。
tvz2xvvm2#
虽然将
optimization.nodeEnv
设置为false
适用于NODE_ENV
变量,但它不适用于 * 所有 * 环境变量,并且它不会阻止process.env
在编译代码中被替换。我在后端使用Webpack,所以在运行时访问很重要。
由于似乎没有在编译代码中保留
process.env
的官方方法,我找到了这个解决方法,它对我很有效。我必须定义一个新的全局变量,我将其命名为
ENVIRONMENT
,在编译期间将其替换为process.env
。在我的代码中,我会像普通对象一样访问它:
上面的代码编译为
process.env.DATABASE_URL
。yzuktlbb3#
我遇到了同样的问题,webpack在构建时替换了process.env变量。对于SSR应用程序,这不是想要的行为。
作为一种变通方法,我在代码中使用了这样的东西来欺骗webpack:
process['e' + 'nv'].MY_VARIABLE
hyrbngr74#
我可以在vue.config.js中通过添加以下内容来避免这种行为:
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选项也是如此。如果
DefinePlugin
对process.env.NODE_ENV
的影响不理想,则应在没有DefinePlugin
的情况下应用列出的插件,如文档中针对production
和development
模式所示。对于除了
NODE_ENV
之外没有环境变量的配置,this answer可能是合适的。**这适用于自定义配置与问题中提供的配置类似的Webpack 4。这可能与其他Webpack版本或提供自己的Webpack配置的工具(如Vue CLI和Create React App)不同。