我从没想过我会使用 Stack Overflow,但我来了!
我无法在 Windows 上安装 DotEnv,当我pip install dotenv使用其可选标志执行时,会抛出此错误:
Collecting dotenv
Using cached dotenv-0.0.5.tar.gz (2.4 kB)
ERROR: Command errored out with exit status 1:
command: 'c:\python38\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Damian Freeman\\AppData\\Local\\Temp\\pip-install-bdy5mww4\\dotenv\\setup.py'"'"'; __file__='"'"'C:\\Users\\Damian Freeman\\AppData\\Local\\Temp\\pip-install-bdy5mww4\\dotenv\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\Damian Freeman\AppData\Local\Temp\pip-pip-egg-info-k9desg5s'
cwd: C:\Users\Damian Freeman\AppData\Local\Temp\pip-install-bdy5mww4\dotenv\
Complete output (52 lines):
WARNING: The wheel package is not available.
ERROR: Command errored out with exit status 1:
command: 'c:\python38\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Damian …Run Code Online (Sandbox Code Playgroud) 我尝试了一些实现,但没有成功。
eval在 package.json 脚本中使用"fetch:data": "eval $(cat .env) ts-node -O '{\"module\":\"commonjs\"}' ./bin/build-api-data.ts"。
这会导致 JSON 解析错误,因为 eval 由于某种原因删除了我的引号。
undefined:1
{module:commonjs}
^
SyntaxError: Unexpected token m in JSON at position 1
Run Code Online (Sandbox Code Playgroud)
使用 dotenv,我在这里遇到的问题是竞争条件导致如下错误:
$ CANDID_ENV=local ts-node -O '{"module":"commonjs"}' ./bin/build-api-data.ts
/Users/lassiter.gregg/code/candidco-web/node_modules/contentful/dist/webpack:/contentful/contentful.js:49
throw new TypeError('Expected parameter accessToken')
^
TypeError: Expected parameter accessToken
Run Code Online (Sandbox Code Playgroud)
代码示例
undefined:1
{module:commonjs}
^
SyntaxError: Unexpected token m in JSON at position 1
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我尝试dotenv.config在文件顶部、init 和函数中进行操作,如您所见。它总是抛出相同的错误,即 contentful 未获取所需的环境变量。也就是说,如果我记录process.env并注释掉相关的代码,fetchApiData那么我会看到所有的环境变量。这就是为什么我认为这是比赛时的情况,但无法找到与我自己的问题类似的任何东西。
此外,更棘手的是,这是一个必须在 Node 和 esnext 环境中工作的自定义脚本。因此,我使用我不太喜欢的语法遇到了棘手的导入/导出问题,但还没有找到解决方法(例如 …
我必须使用私有注册表中的一些包。所以,在我package.json的依赖项部分,我有这样一行:
...
"dependencies": {
"@myco/my-awesome-package": "^0.4.5",
...
}
...
Run Code Online (Sandbox Code Playgroud)
私有注册表需要身份验证,因此我必须.npmrc在我的项目中创建该文件:
registry=https://registry.npmjs.org/
@myco:registry=https://myco-registry-path/
//myco-registry-path/:username=${MYCO_REGISTRY_USER}
//myco-registry-path/:_password=${MYCO_REGISTRY_PASSWORD_BASE64}
Run Code Online (Sandbox Code Playgroud)
是的,我知道_authToken,但就我而言,使用用户名和密码更容易。
总之,在这里你可以看到两个ENV变量:${MYCO_REGISTRY_USER}和${MYCO_REGISTRY_PASSWORD_BASE64}我必须更换之前 npm install。我知道这个问题的非常简单的解决方案:将它们放在“全局”环境变量中,例如我的 .bash_profile (或您选择的任何终端配置文件)。但我不想将这样的变量保留在“全局”范围内,因为它们仅对当前项目很重要。我想要做的是使用dotenv。我想.env在我的项目的根目录中创建一个文件:
MYCO_REGISTRY_USER=myco-registry-username-value
MYCO_REGISTRY_PASSWORD_BASE64=myco-registry-password-value-base64
Run Code Online (Sandbox Code Playgroud)
我希望这个值.npmrc在安装操作中替换我的 env 变量。但是当我尝试时npm install出现错误:Error: Failed to replace env in config: ${MYCO_REGISTRY_USER}. 我能理解为什么会这样。可能是因为 npm.npmrc首先读取值并尝试替换 env 变量并失败,因为此时它对 dotenv 一无所知。我的问题是如何处理?
简短的摘要:
我不想在终端配置文件中保留 env 变量,而是想将它.env放在我的项目中的文件中。
我不得不更换的ENV变量.npmrc与dotenv文件之前 npm install
我试图在节点应用程序启动时预加载 .env 文件。
我有以下配置,但每当我运行时npm run start:dev都会出现错误。
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc",
"prestart": "npm run build",
"start": "node .",
"start:dev": "node -r dotenv/config . dotenv_config_path=/.dev.env",
"start:test": "node -r dotenv/config . dotenv_config_path=/.test.env",
"test": "echo \"Error: no test specified\" && exit 1"
},
Run Code Online (Sandbox Code Playgroud)
或者
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc",
"prestart": "npm run build",
"start": "node .",
"start:dev": "node -r dotenv/config . dotenv_config_path=./.dev.env",
"start:test": "node -r dotenv/config . dotenv_config_path=./.test.env",
"test": "echo \"Error: no test specified\" && …Run Code Online (Sandbox Code Playgroud) 我尝试使用.env节点应用程序和dotenvNPM 模块中的文件来读取它,但使用一些变量和插值。不过,在标准 bash 文件中有效的内容似乎无法在 .env 配置文件中运行。例如,给定:
APP_NAME=tixy
MONGODB_URI="mongodb://127.0.0.1:27017/${APP_NAME}"
Run Code Online (Sandbox Code Playgroud)
会直接以代码形式输出
const mongoUri = process.env.MONGODB_URI
Run Code Online (Sandbox Code Playgroud)
作为"mongodb://127.0.0.1:27017/${APP_NAME}"
有没有办法让.env配置运行?也许我可以在应用程序启动时“获取”它并用于export所有变量,但这似乎很麻烦......
我正在为 Express 项目编写测试,但是当我运行测试脚本时,我的环境变量未加载。
在其他线程中,人们建议使用--setupFiles dotenv/config,我也这样做了,但不幸的是它不起作用。我尝试将其添加到我的测试脚本和文件中jest.config.js,但没有成功。有人对如何解决这个问题有任何提示吗?
语境
这就是我设置 jest 的方式package.json:
"scripts": {
"test": "jest --watchAll --setupFiles dotenv/config"
},
"jest": {
"testEnvironment": "node"
},
Run Code Online (Sandbox Code Playgroud)
在文件顶部app.js,我加载环境变量
require('dotenv').config();
这是我的文件夹结构:
我正在为客户的项目使用 Laravel 6.x,其中我在 Artisan Command 中构建了一个 API 用于同步数据。
现在,客户希望配置谨慎,远离主要源代码,并且尽可能没有任何后备值。这意味着我必须在文件中定义配置.env并使用env()没有任何后备默认值的方法。
env这在 Laravel Artisan 命令类文件中必须是可能的,但是当我在代码中使用该方法时,它无法按预期工作,如下所示:
[站点根目录]\.env:
APP_ENV=local
Run Code Online (Sandbox Code Playgroud)
[siteroot]\app\Console\Commands\SyncSomeData.php:
use Illuminate\Console\Command;
class SyncSomeData extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'sync:some-data';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的不和谐机器人安装 dotenv,pip3 install dotenv但它一直给我这个错误:
ERROR: Command errored out with exit status 1:
command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xmobtpdk/dotenv/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xmobtpdk/dotenv/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-xmobtpdk/dotenv/pip-egg-info
cwd: /tmp/pip-install-xmobtpdk/dotenv/
Complete output (51 lines):
ERROR: Command errored out with exit status 1:
command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-wheel-ts7a2idz/distribute/setup.py'"'"'; __file__='"'"'/tmp/pip-wheel-ts7a2idz/distribute/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-vsx7w_h3
cwd: /tmp/pip-wheel-ts7a2idz/distribute/
Complete output (15 lines):
Traceback (most recent call last):
File "<string>", line …Run Code Online (Sandbox Code Playgroud) {
"type": "service_account",
"project_id": "project_id",
"private_key_id": "private_key_id",
"private_key": "-----BEGIN PRIVATE KEY-----\n",
"client_email": "email",
"client_id": "id",
"auth_uri": "uri_auth",
"token_uri": "token_urin",
"auth_provider_x509_cert_url": "auth_provider_x509_cert_url",
"client_x509_cert_url": "client_x509_cert_url"
}
Run Code Online (Sandbox Code Playgroud)
我尝试对 JSON 进行编码和解码,但没有成功
我什至尝试使用 /// 代替“”
所以我使用sheets-api。我想要实现的是从 .env 变量加载 json 文件的路径
scope=['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.file',
'https://www.googleapis.com/auth/spreadsheets'
]
credentials = ServiceAccountCredentials.from_json_keyfile_name(r"path-for-json-file", scope)
client = gspread.authorize(credentials)
Run Code Online (Sandbox Code Playgroud) docker/build-push-action创建发布标签时,我的 GitHub 操作中会运行以下作业。
jobs:
docker:
runs-on: ubuntu-latest
steps:
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: user/repo:latest
-
name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
Run Code Online (Sandbox Code Playgroud)
在我的工作中Dockerfile,我有一项任务,需要完成.env.production并完成它.env。
COPY .env.production .env
Run Code Online (Sandbox Code Playgroud)
这显然失败了,因为 .env.Production 不包含在 Git 中。
我的问题是,如何在我的 GitHub …
environment-variables docker dockerhub dotenv github-actions