【发布时间】:2020-08-07 05:46:33
【问题描述】:
我有一个项目要从旧版 React 应用迁移到标准 create-react-app 一个(未弹出)。
在遗留项目中,它手动加载带有dotenv和dotenv-expand的.env文件,并通过webpack注入DefinePlugin。
create-react-app直观地支持dotenv,但只能识别带有REACT_APP_前缀的变量。
遗留代码中有很多地方以及其他存储库中使用 process.env.xxx 变量的导入包,因此现在无法在迁移之前使用前缀重命名它们。
在这种情况下,如何让create-react-app 识别没有REACT_APP_ 前缀的dotenv 变量?
顺便说一句,我之前尝试过rewire 构建脚本,对 webpack 进行了一些简单的自定义,比如捆绑 js 和 css:
const path = require('path');
const rewire = require('rewire');
const defaults = rewire('react-scripts/scripts/build.js');
let webpackConfig = defaults.__get__('config');
webpackConfig.output.filename = 'static/js/[name].js';
webpackConfig.optimization.splitChunks = { cacheGroups: { default: false } };
webpackConfig.optimization.runtimeChunk = false;
webpackConfig.plugins.find(plugin => plugin.__proto__.constructor.name === 'MiniCssExtractPlugin').options.filename = 'static/css/[name].css';
webpackConfig.plugins.find(plugin => plugin.__proto__.constructor.name === 'MiniCssExtractPlugin').options.moduleFilename = () => 'static/css/[name].css';
但似乎dotenv 和DefinePlugin 更复杂。不确定是否可以以相同的方式实现。
【问题讨论】:
-
不确定这是否适合您的情况,但如果您使用两种命名样式定义所有变量怎么办? (例如
FOO=bar和REACT_APP_FOO=bar) -
我看过cra的源码,
REACT_APP_的前缀是不能改的。
标签: reactjs webpack create-react-app dotenv