我刚开始使用JS来编程一个机器人,使用Discord.JS和Heroku来托管
在Heroku上,构建成功,但不会上线。Heroku询问时我使用了dotenv
我使用npm安装了dotenv,这是我的dotenv:代码
require('dotenv').config();
console.log(process.env.DISCORD_TOKEN);
console.log(process.env.DISCORD_TOKEN)
在控制台中返回undefined
。
这是我的.env文件:
DISCORD_TOKEN = OTI2M...
这就是我在代码中使用DISCORD_TOKEN
的地方:
const token = process.env.DISCORD_TOKEN;
client.login(token);
本地的构建失败说:
Error [TOKEN_INVALID]: An invalid token was provided.
在Heroku上,它成功构建,但没有在本地使用node index.js
这是Heroku的控制台日志,我确信我在Heroku 中正确配置了env变量
-----> Building on the Heroku-20 stack
-----> Using buildpack: heroku/nodejs
-----> Node.js app detected
-----> Creating runtime environment
NPM_CONFIG_LOGLEVEL=error
NODE_VERBOSE=false
NODE_ENV=production
NODE_MODULES_CACHE=true
-----> Installing binaries
engines.node (package.json): unspecified
engines.npm (package.json): unspecified (use default)
Resolving node version 14.x...
Downloading and installing node 14.18.2...
Using default npm version: 6.14.15
-----> Restoring cache
- node_modules
-----> Installing dependencies
Installing node modules (package.json)
audited 132 packages in 0.767s
18 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
-----> Build
-----> Caching build
- node_modules
-----> Pruning devDependencies
audited 132 packages in 0.791s
18 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
-----> Build succeeded!
-----> Discovering process types
Procfile declares types -> worker
Default types for buildpack -> web
-----> Compressing...
Done: 69.7M
-----> Launching...
Released v15
我错过了什么?
当Heroku询问时,我使用dotenv
我不知道你说的是什么意思。Heroku没有这样的要求。在开发中使用它可能很方便,但Heroku使用config-vars进行配置。
好消息是,dotenv和config-var都做同样的事情:填充环境变量。引用process.env.DISCORD_TOKEN
的代码读取DISCORD_TOKEN
环境变量。
您似乎缺少的唯一步骤是将DISCORD_TOKEN
设置在Heroku一侧。您可以在命令行上设置Heroku配置变量,例如
heroku config:set DISCORD_TOKEN=some_token_value
或者使用基于web的仪表板。
请注意,您的.env
文件不应在存储库中跟踪。这只是为了地方发展。