未验证 提交 8220e5cd 编写于 作者: 陈帅 提交者: GitHub

feat: add environment variable REACT_APP_ENV (#5946)

* feat: add environment variable REACT_APP_ENV

* feat: add alias for start:dev

* bugfix: fix insert code error
上级 46406e52
...@@ -3,5 +3,6 @@ module.exports = { ...@@ -3,5 +3,6 @@ module.exports = {
globals: { globals: {
ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: true, ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: true,
page: true, page: true,
REACT_APP_ENV: true,
}, },
}; };
...@@ -2,12 +2,13 @@ import { IConfig, IPlugin } from 'umi-types'; ...@@ -2,12 +2,13 @@ import { IConfig, IPlugin } from 'umi-types';
import defaultSettings from './defaultSettings'; // https://umijs.org/config/ import defaultSettings from './defaultSettings'; // https://umijs.org/config/
import slash from 'slash2'; import slash from 'slash2';
import themePluginConfig from './themePluginConfig'; import themePluginConfig from './themePluginConfig';
import proxy from './proxy';
const { pwa } = defaultSettings; const { pwa } = defaultSettings;
// preview.pro.ant.design only do not use in your production ; // preview.pro.ant.design only do not use in your production ;
// preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。 // preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。
const { ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION } = process.env; const { ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION, REACT_APP_ENV } = process.env;
const isAntDesignProPreview = ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site'; const isAntDesignProPreview = ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site';
const plugins: IPlugin[] = [ const plugins: IPlugin[] = [
...@@ -39,7 +40,8 @@ const plugins: IPlugin[] = [ ...@@ -39,7 +40,8 @@ const plugins: IPlugin[] = [
importWorkboxFrom: 'local', importWorkboxFrom: 'local',
}, },
} }
: false, // default close dll, because issue https://github.com/ant-design/ant-design-pro/issues/4665 : false,
// default close dll, because issue https://github.com/ant-design/ant-design-pro/issues/4665
// dll features https://webpack.js.org/plugins/dll-plugin/ // dll features https://webpack.js.org/plugins/dll-plugin/
// dll: { // dll: {
// include: ['dva', 'dva/router', 'dva/saga', 'dva/fetch'], // include: ['dva', 'dva/router', 'dva/saga', 'dva/fetch'],
...@@ -143,6 +145,7 @@ export default { ...@@ -143,6 +145,7 @@ export default {
// ...darkTheme, // ...darkTheme,
}, },
define: { define: {
REACT_APP_ENV: REACT_APP_ENV || false,
ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION:
ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION || '', // preview.pro.ant.design only do not use in your production ; preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。 ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION || '', // preview.pro.ant.design only do not use in your production ; preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。
}, },
...@@ -167,9 +170,7 @@ export default { ...@@ -167,9 +170,7 @@ export default {
) { ) {
return localName; return localName;
} }
const match = context.resourcePath.match(/src(.*)/); const match = context.resourcePath.match(/src(.*)/);
if (match && match[1]) { if (match && match[1]) {
const antdProPath = match[1].replace('.less', ''); const antdProPath = match[1].replace('.less', '');
const arr = slash(antdProPath) const arr = slash(antdProPath)
...@@ -178,19 +179,11 @@ export default { ...@@ -178,19 +179,11 @@ export default {
.map((a: string) => a.toLowerCase()); .map((a: string) => a.toLowerCase());
return `antd-pro${arr.join('-')}-${localName}`.replace(/--/g, '-'); return `antd-pro${arr.join('-')}-${localName}`.replace(/--/g, '-');
} }
return localName; return localName;
}, },
}, },
manifest: { manifest: {
basePath: '/', basePath: '/',
}, },
// chainWebpack: webpackPlugin, proxy: proxy[REACT_APP_ENV || 'dev'],
// proxy: {
// '/server/api/': {
// target: 'https://preview.pro.ant.design/',
// changeOrigin: true,
// pathRewrite: { '^/server': '' },
// },
// },
} as IConfig; } as IConfig;
/**
* 在生产环境 代理是无法生效的,所以这里没有生产环境的配置
* The agent cannot take effect in the production environment
* so there is no configuration of the production environment
* For details, please see
* https://pro.ant.design/docs/deploy
*/
export default {
dev: {
'/api/': {
target: 'https://preview.pro.ant.design',
changeOrigin: true,
pathRewrite: { '^': '' },
},
},
test: {
'/api/': {
target: 'https://preview.pro.ant.design',
changeOrigin: true,
pathRewrite: { '^': '' },
},
},
pre: {
'/api/': {
target: 'your pre url',
changeOrigin: true,
pathRewrite: { '^': '' },
},
},
};
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
"docker:push": "npm run docker-hub:build && npm run docker:tag && docker push antdesign/ant-design-pro", "docker:push": "npm run docker-hub:build && npm run docker:tag && docker push antdesign/ant-design-pro",
"docker:tag": "docker tag ant-design-pro antdesign/ant-design-pro", "docker:tag": "docker tag ant-design-pro antdesign/ant-design-pro",
"fetch:blocks": "pro fetch-blocks && npm run prettier", "fetch:blocks": "pro fetch-blocks && npm run prettier",
"format-imports": "cross-env import-sort --write '**/*.{js,jsx,ts,tsx}'", "format-imports": "import-sort --write '**/*.{js,jsx,ts,tsx}'",
"functions:build": "netlify-lambda build ./lambda", "functions:build": "netlify-lambda build ./lambda",
"functions:run": "cross-env NODE_ENV=dev netlify-lambda serve ./lambda", "functions:run": "cross-env NODE_ENV=dev netlify-lambda serve ./lambda",
"gh-pages": "cp CNAME ./dist/ && gh-pages -d dist", "gh-pages": "cp CNAME ./dist/ && gh-pages -d dist",
...@@ -30,12 +30,16 @@ ...@@ -30,12 +30,16 @@
"prettier": "prettier -c --write \"**/*\"", "prettier": "prettier -c --write \"**/*\"",
"site": "npm run fetch:blocks && npm run build && npm run functions:build", "site": "npm run fetch:blocks && npm run build && npm run functions:build",
"start": "umi dev", "start": "umi dev",
"dev": "npm run start:dev",
"start:dev": "cross-env REACT_APP_ENV=dev MOCK=none umi dev",
"start:no-mock": "cross-env MOCK=none umi dev", "start:no-mock": "cross-env MOCK=none umi dev",
"start:no-ui": "cross-env UMI_UI=none umi dev", "start:no-ui": "cross-env UMI_UI=none umi dev",
"start:pre": "cross-env REACT_APP_ENV=pre MOCK=none umi dev",
"start:test": "cross-env REACT_APP_ENV=test MOCK=none umi dev",
"test": "umi test", "test": "umi test",
"tsc": "tsc",
"test:all": "node ./tests/run-tests.js", "test:all": "node ./tests/run-tests.js",
"test:component": "umi test ./src/components", "test:component": "umi test ./src/components",
"tsc": "tsc",
"ui": "umi ui" "ui": "umi ui"
}, },
"husky": { "husky": {
...@@ -45,10 +49,10 @@ ...@@ -45,10 +49,10 @@
}, },
"lint-staged": { "lint-staged": {
"**/*.less": "stylelint --syntax less", "**/*.less": "stylelint --syntax less",
"**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js",
"**/*.{js,jsx,tsx,ts,less,md,json}": [ "**/*.{js,jsx,tsx,ts,less,md,json}": [
"prettier --write" "prettier --write"
], ]
"**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js"
}, },
"browserslist": [ "browserslist": [
"> 1%", "> 1%",
...@@ -78,7 +82,7 @@ ...@@ -78,7 +82,7 @@
"umi-request": "^1.0.8" "umi-request": "^1.0.8"
}, },
"devDependencies": { "devDependencies": {
"@ant-design/pro-cli": "^1.0.14", "@ant-design/pro-cli": "^1.0.18",
"@types/classnames": "^2.2.7", "@types/classnames": "^2.2.7",
"@types/express": "^4.17.0", "@types/express": "^4.17.0",
"@types/history": "^4.7.2", "@types/history": "^4.7.2",
......
import { Icon, Tooltip } from 'antd'; import { Icon, Tooltip, Tag } from 'antd';
import React from 'react'; import React from 'react';
import { connect } from 'dva'; import { connect } from 'dva';
import { formatMessage } from 'umi-plugin-react/locale'; import { formatMessage } from 'umi-plugin-react/locale';
...@@ -15,6 +15,12 @@ export interface GlobalHeaderRightProps extends ConnectProps { ...@@ -15,6 +15,12 @@ export interface GlobalHeaderRightProps extends ConnectProps {
layout: 'sidemenu' | 'topmenu'; layout: 'sidemenu' | 'topmenu';
} }
const ENVTagColor = {
dev: 'orange',
test: 'green',
pre: '#87d068',
};
const GlobalHeaderRight: React.SFC<GlobalHeaderRightProps> = props => { const GlobalHeaderRight: React.SFC<GlobalHeaderRightProps> = props => {
const { theme, layout } = props; const { theme, layout } = props;
let className = styles.right; let className = styles.right;
...@@ -64,6 +70,7 @@ const GlobalHeaderRight: React.SFC<GlobalHeaderRightProps> = props => { ...@@ -64,6 +70,7 @@ const GlobalHeaderRight: React.SFC<GlobalHeaderRightProps> = props => {
</a> </a>
</Tooltip> </Tooltip>
<Avatar /> <Avatar />
{REACT_APP_ENV && <Tag color={ENVTagColor[REACT_APP_ENV]}>{REACT_APP_ENV}</Tag>}
<SelectLang className={styles.action} /> <SelectLang className={styles.action} />
</div> </div>
); );
......
...@@ -2,8 +2,8 @@ export default { ...@@ -2,8 +2,8 @@ export default {
'menu.welcome': 'Welcome', 'menu.welcome': 'Welcome',
'menu.more-blocks': 'More Blocks', 'menu.more-blocks': 'More Blocks',
'menu.home': 'Home', 'menu.home': 'Home',
'menu.admin': 'admin', 'menu.admin': 'Admin',
'menu.admin.sub-page': 'sub-page', 'menu.admin.sub-page': 'Sub-Page',
'menu.login': 'Login', 'menu.login': 'Login',
'menu.register': 'Register', 'menu.register': 'Register',
'menu.register.result': 'Register Result', 'menu.register.result': 'Register Result',
......
...@@ -3,8 +3,8 @@ export default { ...@@ -3,8 +3,8 @@ export default {
'menu.more-blocks': 'More Blocks', 'menu.more-blocks': 'More Blocks',
'menu.home': 'Início', 'menu.home': 'Início',
'menu.login': 'Login', 'menu.login': 'Login',
'menu.admin': 'admin', 'menu.admin': 'Admin',
'menu.admin.sub-page': 'sub-page', 'menu.admin.sub-page': 'Sub-Page',
'menu.register': 'Registro', 'menu.register': 'Registro',
'menu.register.result': 'Resultado de registro', 'menu.register.result': 'Resultado de registro',
'menu.dashboard': 'Dashboard', 'menu.dashboard': 'Dashboard',
......
...@@ -34,3 +34,5 @@ declare let ga: Function; ...@@ -34,3 +34,5 @@ declare let ga: Function;
// preview.pro.ant.design only do not use in your production ; // preview.pro.ant.design only do not use in your production ;
// preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。 // preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。
declare let ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: 'site' | undefined; declare let ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: 'site' | undefined;
declare const REACT_APP_ENV: 'test' | 'dev' | 'pre' | false;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册