Javascript React中的Env cmd环境变量
我似乎已经尝试了env cmd命令的各种变体,但无法找出为什么我不能访问变量 我最初遵循这个教程 但是文档已经改变了,因此您需要使用命令-e,不像视频那样,因此my package.json命令读取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" : {
"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"
}