Javascript React中的Env cmd环境变量

Javascript React中的Env cmd环境变量,javascript,reactjs,environment-variables,Javascript,Reactjs,Environment Variables,我似乎已经尝试了env cmd命令的各种变体,但无法找出为什么我不能访问变量 我最初遵循这个教程 但是文档已经改变了,因此您需要使用命令-e,不像视频那样,因此my package.json命令读取 "dev-server": "env-cmd -e dev webpack-dev-server", 任何my.env cmdrc读取的 { "dev" : { "BASE_URL" : "development" }, "qa" : {

我似乎已经尝试了env cmd命令的各种变体,但无法找出为什么我不能访问变量

我最初遵循这个教程

但是文档已经改变了,因此您需要使用命令-e,不像视频那样,因此my package.json命令读取

"dev-server": "env-cmd -e dev webpack-dev-server",
任何my.env cmdrc读取的

{
    "dev" : {
        "BASE_URL" : "development"
    },
    "qa" : {
        "BASE_URL" : "qa"
    },
    "prod" : {
        "BASE_URL" : "prod"
    }
}
但由于某些原因,我无法访问process.env.BASE_URL。非常感谢您的帮助

package.json

"dev-server": "env-cmd dev webpack-dev-server",
添加一个前缀,如

反应应用程序_

重新运行项目并使用

process.env.REACT_APP_BASE_URL

Create React App文档说明,您必须在.env文件中的所有环境变量前面加上React_App_u前缀,才能从您的代码进程.env.React_App_u中获得这些变量

试一试

反应\应用\基础\ URL


而不是为任何对此感兴趣的人提供基本URL。这实际上是通过使用Dotenv webpack库最终解决的

在您的网页包配置文件中

const Dotenv = require('dotenv-webpack');
将env的参数传递给module.exports

module.exports = (env) => {
 let ENV_CONFIG;

 if(env === 'dev'){
     ENV_CONFIG = new Dotenv({path: './environment/.env-dev'})
 }

 if(env === 'staging'){
     ENV_CONFIG = new Dotenv({path: './environment/.env-staging'})
 }

 if(env === 'production'){
     ENV_CONFIG = new Dotenv({path: './environment/.env-production'})
 }
}
然后在插件中

plugins : [
    ENV_CONFIG
]
然后,您的package.json脚本可能看起来像

"build:prod": "webpack -p --env production"
然后,您应该能够像这样访问process.env下的变量

process.env.SERVER_URL

您需要在环境变量前面加上
REACT\u APP
,否则,这些变量将被忽略以避免冲突

文档中说要将您的
.env
文件放在根目录(
/src
)中,但我成功地避开了
/src/environments/.env.local
以及
.env.staging
.env.production

我正在使用
env cmd
,我的命令如下:

  "scripts": {
    "start": "env-cmd -f ./environments/.env.staging npm-run-all -p watch-css start-js",
    "start:naked": "npm-run-all -p watch-css start-js",
    "start:local": "env-cmd -f ./environments/.env.local yarn start:naked",
    "start:staging": "env-cmd -f ./environments/.env.staging yarn start:naked",
    "start:production": "env-cmd -f ./environments/.env.production yarn start:naked",
    "start-js": "react-scripts start",
    "build": "npm run build-css && react-scripts build",
    "build:staging": "env-cmd -f ./environments/.env.staging npm run build",
    "build:prod": "env-cmd -f ./environments/.env.production npm run build",
    "build-css": "node-sass-chokidar src -o dist/styles",
    "watch-css": "npm run build-css && node-sass-chokidar src -o dist/styles --watch",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

还是什么都没有:(在重新运行项目npm cache clean之前清除缓存——强制根据env cmd文档使用env cmdrc文件时,您必须为其设置-e标志。在不使用的情况下尝试,并得到一个“无法定位env文件”错误是create react app的react app前缀部分吗?这与常规react不同吗?这可能是一个愚蠢的错误question@AshHogarth我想是的。我是一个反应新手。你可以在这里参考。谢谢@Joee,但Yahiya建议,什么也没有。如果项目不是创建反应应用程序引导,这一切都有效吗?@Ash Hogarth-是的,它应该有效,因为env cmd是独立的库,它对创建反应应用程序没有任何依赖性。从表面上看,创建反应应用程序是一个样板代码,所以如果一些库的工作,它肯定会工作在非创建反应应用程序项目。希望你明白我的意思。谢谢。热党,我会继续插拔!谢谢你的帮助,虽然到目前为止dude@Ash霍加斯-Thanks@AshHogarth这很好,因为您在package.json中定义了脚本,在.en中定义了Joe变量v-cmdrc,但要运行应用程序,它将使用此命令执行,在您应用于.env cmdrc的情况下,示例是:npm run dev serverI收到一个错误,无法识别env cmd…似乎env cmd是一个单独的库,我们需要安装…@ATHER
env cmd
对于基本环境文件不是必需的。
react脚本
@0.2.3和更高版本在引擎盖下使用了
dotenv
。我只是另外使用了
env cmd
node sass chokidar
、和
npm在我的构建过程中运行所有的
  "scripts": {
    "start": "env-cmd -f ./environments/.env.staging npm-run-all -p watch-css start-js",
    "start:naked": "npm-run-all -p watch-css start-js",
    "start:local": "env-cmd -f ./environments/.env.local yarn start:naked",
    "start:staging": "env-cmd -f ./environments/.env.staging yarn start:naked",
    "start:production": "env-cmd -f ./environments/.env.production yarn start:naked",
    "start-js": "react-scripts start",
    "build": "npm run build-css && react-scripts build",
    "build:staging": "env-cmd -f ./environments/.env.staging npm run build",
    "build:prod": "env-cmd -f ./environments/.env.production npm run build",
    "build-css": "node-sass-chokidar src -o dist/styles",
    "watch-css": "npm run build-css && node-sass-chokidar src -o dist/styles --watch",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }