dotenv process.env 变量在全局安装的自定义 CLI 工具中未定义
dotenv process.env variable undefined in globally installed custom CLI tool
我正在将我的一个 CLI 工具迁移到全局安装,以便它可以全局安装并在我的系统上的任何地方使用。我的大多数 src
文件的顶部都包含 require('dotenv').config()
,但由于某些原因 env
未定义,因为它已安装到全局。
我错过了什么?
我的包 JSON 看起来像:
{
"name": "scoop",
"version": "1.9.0",
"main": "bin/scoop.js",
"dependencies": {
"axios": "0.20.0",
"cli-spinners": "2.4.0",
"commander": "6.1.0",
"dotenv": "8.2.0",
"log-symbols": "4.0.0",
"ora": "5.1.0",
"readline": "1.3.0"
},
"bin": {
"scoop": "./bin/scoop.js"
}
}
bin/scoop.js 然后在顶部包含以下内容:
#!/usr/bin/env node
require('dotenv').config();
const forms = require('../src/utils/LocateForms');
...
我正在加载其他导出的 JS src 文件,我的项目中有一个 .env
我的自定义变量现在刚刚出现未定义?
我认为这是预期的行为。
根据 GitHub readme.
,dotenv
的默认 path
值为 Default: path.resolve(process.cwd(), '.env')
现在 process.cwd
根据执行可执行文件的位置而变化。
例如,如果您从 node /a/b/c.js
开始,则 cwd 将为 /a/b
,如果您从 node /a/b/d/c.js
开始,则 cwd 将为 /a/b/d
.
因此,为了获得您想要的 .env
文件,您必须像大多数其他可执行文件一样将 .env
文件存储在 ~/.yourenv
的公共区域(想想 .bashrc
).
或者,您可以尝试获取安装文件夹并使用绝对路径获取.env
文件。
例如你可以尝试导入npm
并获取prefix
来找出安装文件夹。
var npm = require("npm")
npm.load({}, function (er) {
if (er) return handleError(er)
console.log(npm.get('prefix'));
})
这样的包
我正在将我的一个 CLI 工具迁移到全局安装,以便它可以全局安装并在我的系统上的任何地方使用。我的大多数 src
文件的顶部都包含 require('dotenv').config()
,但由于某些原因 env
未定义,因为它已安装到全局。
我错过了什么?
我的包 JSON 看起来像:
{
"name": "scoop",
"version": "1.9.0",
"main": "bin/scoop.js",
"dependencies": {
"axios": "0.20.0",
"cli-spinners": "2.4.0",
"commander": "6.1.0",
"dotenv": "8.2.0",
"log-symbols": "4.0.0",
"ora": "5.1.0",
"readline": "1.3.0"
},
"bin": {
"scoop": "./bin/scoop.js"
}
}
bin/scoop.js 然后在顶部包含以下内容:
#!/usr/bin/env node
require('dotenv').config();
const forms = require('../src/utils/LocateForms');
...
我正在加载其他导出的 JS src 文件,我的项目中有一个 .env
我的自定义变量现在刚刚出现未定义?
我认为这是预期的行为。
根据 GitHub readme.
,dotenv
的默认 path
值为 Default: path.resolve(process.cwd(), '.env')
现在 process.cwd
根据执行可执行文件的位置而变化。
例如,如果您从 node /a/b/c.js
开始,则 cwd 将为 /a/b
,如果您从 node /a/b/d/c.js
开始,则 cwd 将为 /a/b/d
.
因此,为了获得您想要的 .env
文件,您必须像大多数其他可执行文件一样将 .env
文件存储在 ~/.yourenv
的公共区域(想想 .bashrc
).
或者,您可以尝试获取安装文件夹并使用绝对路径获取.env
文件。
例如你可以尝试导入npm
并获取prefix
来找出安装文件夹。
var npm = require("npm")
npm.load({}, function (er) {
if (er) return handleError(er)
console.log(npm.get('prefix'));
})
这样的包