// 这个答案描述了 RSK 目前的工作原理,如果您修改了 RSK 的Html
组件或服务器端路由(这也可能破坏了您的应用程序) ,您的问题并不清楚
什么是 main.js?
main.js 是 WebPack 捆绑所有 JavaScript 的地方,这就是为什么强制添加引用它的脚本标签使其适用于非发布版本的原因。
但是您应该使用 --release 构建,因为...
如果您使用 --release 构建应用程序,则会将文件内容的哈希添加到文件名中。这意味着当内容更改时,文件名会更改。
由于旧版本的任何缓存(例如在 ISP 处)都用于具有不同名称的文件,因此可以保证请求具有更新名称的更新文件的客户端不会获得旧版本。
那么如何使用哈希指定正确的 main.js 名称呢?
该Html
组件应该有一个<body>
类似的 JSX 片段:
{script && (
<script
id="source"
src={script}
data-initial-state={JSON.stringify(state)}
/>
)}
这在标准 RSK 中有效,因为该script
变量包含 main.js 文件名(使用 --release 构建时包含哈希)。这个变量值来源于 assets.js,它是由 WebPack 构建的。然后Html
通过 server.js 的注入将其提供给组件以在上面的片段中使用:
app.get('*', async (req, res, next) => {
const data = { title: '', description: '', style: '', script: assets.main.js, children: '' };
// ...
const html = ReactDOM.renderToStaticMarkup(<Html {...data} />);