node.js - 如何在不缩小的情况下构建 React 的生产版本?
问题描述
背景
我一直在或多或少地遵循官方指南来设置本地开发环境,react似乎使用create-react-app
,它确实设置了很多。
现在,如果我运行,我会得到文件夹npm run build
中所有内容的缩小版本。build
但是,如果我运行npm start
NodeJS 服务的版本似乎没有任何修改。但我看不到这些文件。
问题
所以要么:
- 我可以访问
npm start
某处生成的文件吗?因为这些似乎没有修改。(build
从不在那里修改) - 或者我可以以某种方式运行
npm run build
,所以它使用未最小化的文件进行“开发”构建?
尝试
我的目标只是获取最小化版本的 react scripts。
至于最后一个问题,我已经按照这个问题的建议尝试了一些参数和环境变量,但正如你所看到的,它失败了:
$ NODE_ENV=dev npm run build --dev --configuration=dev
> example-project@0.1.0 build [...]
> react-scripts build
Creating an optimized production build...
[...]
系统
我package.json
有默认脚本:
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
注意:请不要问我为什么这样做或试图说服我这样做是不好的。我可能想要这个的原因有很多,例如调试或这个特定的用例。
解决方案
要更改 webpack 配置和构建脚本,您必须从 create-react-app 中弹出(我不推荐此步骤,因为它会破坏未来的兼容性),或者您可以使用 rewire 之类的工具来覆盖某些设置
看看这个 https://github.com/timarney/react-app-rewired
我个人使用只是重新布线
npm i rewire --save-dev
这是我过去为我的一个项目创建的示例配置,效果非常好!
- 创建一个 build.js
- 更改您的 package.json 以便它运行 build.js
构建.js
const rewire = require('rewire');
const defaults = rewire('react-scripts/scripts/build.js');
const config = defaults.__get__('config');
// Consolidate chunk files instead
config.optimization.splitChunks = {
cacheGroups: {
default: false,
},
};
// Move runtime into bundle instead of separate file
config.optimization.runtimeChunk = false;
// JS
config.output.filename = '[name].js';
// CSS. "5" is MiniCssPlugin
config.plugins[5].options.filename = '[name].css';
config.plugins[5].options.publicPath = '../';
然后在我的 package.json 中,我像这样更改了 npm 脚本链接(节点构建将运行 build.js 脚本)
包.json
"scripts": {
"start": "react-scripts start",
"build": "node build && gulp",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
所以如果你真的想从 create-react-app 中弹出,你所要做的就是运行
npm run-script eject
然后您将获得一个包含 create-react-app 使用的所有配置的新文件夹
但正如我之前所说,没有理由不使用 rewire 而只是覆盖配置而不是弹出
如果有帮助,请不要忘记标记为答案 干杯和成功
推荐阅读
- node.js - 将迁移更改列续集为 FK,然后撤消失败
- python - RPi 3B+ OpenCV Python3 错误
- python-3.x - 从 Python 3/boto3 使用 QuickSight API 创建具有多个数据集的模板
- tensorflow - 我在 anaconda 提示符下成功安装了 tensorflow,但无法在 jupyter notebook 中导入
- reactjs - 在反应js中加载d3地图
- regex - 用随机字符串向后看 - 解决方法?
- webrtc-android - Android webrtc SIGSEGV 错误
- javascript - 从以编程方式注入的 Chrome 扩展程序中的弹出窗口链接到选项页面
- azure - netcoreapp2.1升级到3.1导致502.5错误
- java - 这是我的代码中的错误还是 cellfactory 的问题