运行后npm run build,结果index.html类似于:
npm run build
index.html
<script>!function (i) { function e(e) { for //rest omitted <script src="/static/js/2.3f294f32.chunk.js"></script> <script src="/static/js/main.7b9daa35.chunk.js"></script>
第一个<script>元素是我已提取到名为的文件的内联javascriptloader.js
<script>
loader.js
<script src="/loader.js"></script> <script src="/static/js/2.3f294f32.chunk.js"></script> <script src="/static/js/main.7b9daa35.chunk.js"></script>
这可行,但我想将 所有3个文件合并为一个文件
我尝试使用filesmerge.com合并JS文件,但这在引用单个文件时导致错误:
output.min.js:1 Uncaught TypeError: (intermediate value)(...) is not a function at output.min.js:1
然后,我尝试使用jscompress.com进行合并,尽管这不会产生任何错误,但未呈现react root元素
我也尝试过在create-react-app repo上建议的此解决方案,该解决方案不起作用。没有产生错误,但没有呈现任何react元素(页面保持空白)
简而言之: 可能,但不切实际 。为什么?您的应用程序将不再是渐进式的,单个js文件可能会变得非常大(性能降低,而webpack却没有提供任何代码拆分优势)。
虽然我既不喜欢create-react-app也不将所有内容都捆绑到一个bundle.js文件中,但是您首先要弹出:yarn eject或者npm run eject-您可能可以使用一些第3方软件包来覆盖而不弹出,但是我将其留给您弄清楚。
create-react-app
bundle.js
yarn eject
npm run eject
然后,您需要转到config/webpack.config.js并执行以下操作:
config/webpack.config.js
InlineChunkHtmlPlugin
plugins:
isEnvProduction && shouldInlineRuntimeChunk && new InlineChunkHtmlPlugin(HtmlWebpackPlugin, [/runtime-.+[.]js/])
output:
filename:
filename: "static/js/bundle.min.js",
chunkFilename:
optimization:
splitChunks:
runtimeChunk:
runtimeChunk: false
MiniCssExtractPlugin
filename
filename: "static/css/main.min.css",
chunkFileName:
工作仓库 :https : //github.com/mattcarlotta/cra-single- bundle
我还向package.json仓库添加了两个启动脚本:
package.json
1.)测试生产版本;运行yarn prod或npm run prod 在 编译源代码之后。
yarn prod
npm run prod
2.)要分析Webpack捆绑包,请运行yarn analyze或npm run analyze查看块分布图。
yarn analyze
npm run analyze