标签: dotenv

无法在 Windows 上安装 dotenv

我从没想过我会使用 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)

python pip dotenv

9
推荐指数
1
解决办法
1万
查看次数

如何使用 ts-node 加载环境变量?

我尝试了一些实现,但没有成功。

第一次尝试

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 环境中工作的自定义脚本。因此,我使用我不太喜欢的语法遇到了棘手的导入/导出问题,但还没有找到解决方法(例如 …

javascript environment-variables node.js typescript dotenv

9
推荐指数
1
解决办法
3万
查看次数

在 `npm install` 之前用 dotenv 替换 .npmrc 中的 env 变量

我必须使用私有注册表中的一些包。所以,在我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 一无所知。我的问题是如何处理?

简短的摘要:

  1. 我不想在终端配置文件中保留 env 变量,而是想将它.env放在我的项目中的文件中。

  2. 我不得不更换的ENV变量.npmrc与dotenv文件之前 npm install

node.js npm npm-install dotenv

8
推荐指数
1
解决办法
2820
查看次数

从自定义路径预加载 env 文件

我试图在节点应用程序启动时预加载 .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)

node.js dotenv

8
推荐指数
1
解决办法
1万
查看次数

在 .env 文件中使用插值

我尝试使用.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所有变量,但这似乎很麻烦......

config environment-variables node.js dotenv

8
推荐指数
1
解决办法
6141
查看次数

Jest 不加载环境变量(即使使用 --setupFiles dotenv/config )

我正在为 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();

这是我的文件夹结构:

项目的文件夹结构:一个源文件夹,其中包含多个文件夹,包括一个测试文件夹。 src 之外是 app.js、routes.js、.env、package.json 和其他一些文件

javascript node.js express jestjs dotenv

8
推荐指数
1
解决办法
6901
查看次数

Laravel 环境变量(没有在方法中传递默认值)在 Artisan 命令文件中不起作用

我正在为客户的项目使用 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)

php environment-variables laravel dotenv phpdotenv

8
推荐指数
1
解决办法
5596
查看次数

错误:命令出错,退出状态为 1:python setup.py egg_info 检查日志以获取完整的命令输出。尝试安装 dotenv 时

我正在尝试为我的不和谐机器人安装 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)

python pip package dotenv

8
推荐指数
1
解决办法
4062
查看次数

我们如何在 python 中将 JSON 凭证存储到 ENV 变量中?

{
    "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)

python json dotenv

8
推荐指数
1
解决办法
1万
查看次数

使用 docker/build-push-action 和 GitHub Actions 的生产 ENV 文件

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

7
推荐指数
1
解决办法
5282
查看次数