将 .env 常量传递给内部目录
Passing .env consts to inner directories
我的 ConfigKnex.ts 文件看起来像
require("ts-node/register");
import { config } from "dotenv";
config();
const { DATABASE_URL } = process.env;
console.log({ DATABASE_URL });
export const development = {
client: "postgresql",
connection: DATABASE_URL,
};
我的文件目录看起来像
server
- lib
-- somefiles.js
- package.json
- .env
如果我 运行 "db:seed": "npx knex --knexfile ./ConfigKnex.ts seed:run"
,就可以了。
如果我将 ConfigKnex 移动到 lib 文件夹下 运行 "db:seed": "npx knex --knexfile ./lib/ConfigKnex.ts seed:run"
,它不会。进一步调试后,我注意到如果我移动 ConfigKnex,DATABASE_URL
是未定义的。
为什么 ConfigKnex 只能获取本地的 .env?有没有办法在没有中间文件的情况下将 .env 常量传递给 ConfigKnex?
您可以将路径传递给 dotenv.config()。 Node 的 path
模块可以解决您的问题并规范化路径。像这样:
import path from "path";
import { config } from "dotenv";
config({
path: path.resolve(__dirname, "..", ".env"), // adjust path to your needs
})
我的 ConfigKnex.ts 文件看起来像
require("ts-node/register");
import { config } from "dotenv";
config();
const { DATABASE_URL } = process.env;
console.log({ DATABASE_URL });
export const development = {
client: "postgresql",
connection: DATABASE_URL,
};
我的文件目录看起来像
server
- lib
-- somefiles.js
- package.json
- .env
如果我 运行 "db:seed": "npx knex --knexfile ./ConfigKnex.ts seed:run"
,就可以了。
如果我将 ConfigKnex 移动到 lib 文件夹下 运行 "db:seed": "npx knex --knexfile ./lib/ConfigKnex.ts seed:run"
,它不会。进一步调试后,我注意到如果我移动 ConfigKnex,DATABASE_URL
是未定义的。
为什么 ConfigKnex 只能获取本地的 .env?有没有办法在没有中间文件的情况下将 .env 常量传递给 ConfigKnex?
您可以将路径传递给 dotenv.config()。 Node 的 path
模块可以解决您的问题并规范化路径。像这样:
import path from "path";
import { config } from "dotenv";
config({
path: path.resolve(__dirname, "..", ".env"), // adjust path to your needs
})