components
components copied to clipboard
All variables in dotenv file are converted to string type
I found serverless cli using dotenv to parse .env file, but dotenv will convert all variables to string, if I config number type in .env for example PORT=3306, then my mysql connection will throw port unknow error.
Ralative issue: https://github.com/motdotla/dotenv/issues/51
Maybe we can do like dotenv-parse-variables to keep type of variables in .env.
@yugasun by design env variables can only be strings, you cannot set at CLI level a number value, it's also only strings that you can store at process.env in Node.js (if you try to assign number, it'll be coerced to string).
Also recommended (and imo the only valid) use of dotenv is to at begin of program initialization transport all env vars from .env to process.env, and after that read them only from process.env (technically weather we're relying on dotenv or not, should be transparent to our app logic. It's the process.env that should be treated as the only source of truth)
In light of above, real fix for that issue, is to coerce PORT value to number before passing it to mysql connection constructor.
Yeah, we can not append number type to process.env, maybe we can append all variables in .env as a JSON object, then we can parse ${env:xx} from this json object?
Yes, technically you can store stringified JSON as env var, and then resolve it when needed.
I'm not sure exactly what problem we're trying to solve (?) Where is this mysql connection setup which raises issues?
@medikoo It's just an example, the key point is user want to keep the type of variables in .env config.
@medikoo It's just an example, the key point is user want to keep the type of variables in .env config.
Ok, then the only way is serialization to string and unserialization.