eval() 函数中的节点 process.env 变量给出不同的结果
Node process.env variable in eval() function gives different result
我有一个 React 应用 运行 在节点中使用服务器端渲染。
以下环境变量在我的测试环境中通过kubernetes设置为test
:process.env.NODE_ENV
.
当我 运行 以下两个命令时,它们会给出不同的结果。我希望该值始终为 test
。
log.debug(process.env.NODE_ENV) // logs development
log.debug(eval('process.env.NODE_ENV')) // logs test
不知何故,看起来变量首先被解释为 development
(如果它未定义,这可能会在我的代码中发生),但它以某种方式被 [= 正确解释为 test
18=]函数。
什么会导致节点以不同方式解释两个表达式之间的值?
编辑:添加了 kubernetes yaml 配置。
${} 变量在发布过程中被 Azure DevOps 替换。
apiVersion: v1
kind: ConfigMap
metadata:
name: config
namespace: ${KUBERNETES_NAMESPACE}
data:
NODE_ENV: ${NODE_ENV}
---
kind: Service
apiVersion: v1
metadata:
name: ${SERVICE_NAME}
spec:
selector:
app: ${SERVICE_NAME}
ports:
- name: http
protocol: TCP
port: 80
targetPort: 3000
loadBalancerIP: ${IP_NUMBER}
type: LoadBalancer
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: ${SERVICE_NAME}
labels:
app: ${SERVICE_NAME}
spec:
replicas: 2
selector:
matchLabels:
app: ${SERVICE_NAME}
template:
metadata:
labels:
app: ${SERVICE_NAME}
spec:
containers:
- name: ${SERVICE_NAME}
image: {IMAGE_PATH}/${IMAGE_REPO}:${BUILD_NUMBER}
ports:
- name: http
containerPort: 3000
protocol: TCP
resources:
limits:
cpu: 100m
memory: 1024Mi
requests:
cpu: 100m
memory: 1024Mi
envFrom:
- configMapRef:
name: config
imagePullSecrets:
- name: ${IMAGEPULLSECRETNAME}
我好像找到问题的原因了
我们使用 webpack 进行捆绑(我可能应该提到这一点),并且在 webpack 输出的服务器代码中,我看到它已将 process.env.NODE_ENV
解析为静态值,但它对 eval(process.env.NODE_ENV)
.
看来我的 post 是不必要的,但我希望它能对以后的人有所帮助。
我有一个 React 应用 运行 在节点中使用服务器端渲染。
以下环境变量在我的测试环境中通过kubernetes设置为test
:process.env.NODE_ENV
.
当我 运行 以下两个命令时,它们会给出不同的结果。我希望该值始终为 test
。
log.debug(process.env.NODE_ENV) // logs development
log.debug(eval('process.env.NODE_ENV')) // logs test
不知何故,看起来变量首先被解释为 development
(如果它未定义,这可能会在我的代码中发生),但它以某种方式被 [= 正确解释为 test
18=]函数。
什么会导致节点以不同方式解释两个表达式之间的值?
编辑:添加了 kubernetes yaml 配置。
${} 变量在发布过程中被 Azure DevOps 替换。
apiVersion: v1
kind: ConfigMap
metadata:
name: config
namespace: ${KUBERNETES_NAMESPACE}
data:
NODE_ENV: ${NODE_ENV}
---
kind: Service
apiVersion: v1
metadata:
name: ${SERVICE_NAME}
spec:
selector:
app: ${SERVICE_NAME}
ports:
- name: http
protocol: TCP
port: 80
targetPort: 3000
loadBalancerIP: ${IP_NUMBER}
type: LoadBalancer
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: ${SERVICE_NAME}
labels:
app: ${SERVICE_NAME}
spec:
replicas: 2
selector:
matchLabels:
app: ${SERVICE_NAME}
template:
metadata:
labels:
app: ${SERVICE_NAME}
spec:
containers:
- name: ${SERVICE_NAME}
image: {IMAGE_PATH}/${IMAGE_REPO}:${BUILD_NUMBER}
ports:
- name: http
containerPort: 3000
protocol: TCP
resources:
limits:
cpu: 100m
memory: 1024Mi
requests:
cpu: 100m
memory: 1024Mi
envFrom:
- configMapRef:
name: config
imagePullSecrets:
- name: ${IMAGEPULLSECRETNAME}
我好像找到问题的原因了
我们使用 webpack 进行捆绑(我可能应该提到这一点),并且在 webpack 输出的服务器代码中,我看到它已将 process.env.NODE_ENV
解析为静态值,但它对 eval(process.env.NODE_ENV)
.
看来我的 post 是不必要的,但我希望它能对以后的人有所帮助。