相关平台
微信小程序
小程序基础库: 2.17.3
使用框架: React
复现步骤
1.在config/dev.js和config/prod/js中自定义了env变量
env: {
NODE_ENV: '"development"',
EVN_API: `${DEV_EVN_API}/api`,
IMG_API: `${DEV_EVN_API}`
}
2.在config/index.js中merge环境变量之前打印require('./dev')显示env变量正常
3.在微信开发者工具中打印process.env显示一个空对象"{}"
期望结果
期望能够正常注入环境变量
实际结果
并没有注入环境变量
环境信息
Taro CLI 3.2.12 environment info:
System:
OS: Windows 10
Binaries:
Node: 14.16.1 - C:\Program Files\nodejs\node.EXE
Yarn: 1.22.4 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
npm: 7.12.1 - C:\Users\XuKeChu\AppData\Roaming\npm\npm.CMD
8条答案
按热度按时间46scxncf1#
直接使用
process.env.NODE_ENV
试试axr492tv2#
我吐了 家人们
需要
env: { API_PREFIX: JSON.stringify('https') }
包一层才行,搞了我两小时kmbjn2e33#
我吐了 家人们
需要
env: { API_PREFIX: JSON.stringify('https') }
包一层才行,搞了我两小时冒昧的问一下,所谓的包一层是具体是指什么?能方便看一下prod.js和dev.js的代码么?
x6yk4ghg4#
@xukechu 我是直接在
config/index.js
指定的, 然后通过根目录.env文件配置的cbjzeqam5#
这是实际的代码
gv8xihay6#
这是实际的代码
好的,感谢~
epggiuax7#
这里要感谢楼上两位大佬的代码和思路, 让我完美解决了这个问题, 这里我把自己的处理方式和一些想法贴出来
os
:win10
node
:12.22.6
taro
:3.4.9
dotenv
:16.0.1
完整代码如下:
.env
:config/dev.js
:config/prod.js
:config/index.js
:然后我们在页面中就能通过
process.env.baseUrl
访问到我们在.env
文件中设置的baseUrl
的值了以及所谓的
包一层
, 是这样的, 举个例子, 是将:处理为:
区别就是这个
'production'
和'"production"'
, 一层引号和两层引号的区别, 这个如果不处理, 默认将只有一层引号, 那么将会导致nodejs
报错n1bvdmb68#
同时 dotenv 里面提到用
es6 import
的方式来使用dotenv
: 如何用import的方式使用dotenv, 它会将.env
中的变量全部自动加到process.env
中, 以及推测是由于config/index.js
最后有merge
的操作, 导致我们在.env
中写的变量会被覆盖掉, 页面中访问的时候结果会是undefined
目前我暂时没有找到用
es6 import
的方式来使用dotenv
的正确姿势, 想到最后都要走config/index.js
, 因此就直接在config/index.js
中写了, 而通过commonjs
的方式使用dotenv
能有一个parsed
的字段来接收我们自己的.env
中的值, 详情参考文档: dotenv document, 这样就会非常方便我们处理自己的环境变量