reactjs - 如何在 SSR 反应应用程序中将哈希添加到捆绑名称
问题描述
我有 ssr 应用程序和服务器有代码(简化)
const content = renderToString(
<Provider store={store}>
<StaticRouter location={req.path} context={context}>
<div>{renderRoutes(Routes)}</div>
</StaticRouter>
</Provider>
);
return `
<html>
<head>
</head>
<body>
<div id="root">${content}</div>
<script src="/bundle.js"></script>
</body>
</html>
`;
问题是,想要将哈希添加到由 webpack 组成的 bundle.js 中。我可以编辑编译捆绑包的 webpack 配置,以便它会在名称中散列,但服务器代码不知道捆绑包的动态名称。
我有两个解决方案:
- 将插件添加到 webpack,以便它会生成模板(例如
.hbs
)文件,其中已经插入了包名称,然后在服务器上对其进行修改以插入其他数据(如元、内容等)。我不喜欢这个解决方案,因为它需要在每个请求上读取文件 - 在编译客户端的 webpack 配置中设置动态 ENV 变量,将其添加到包名称,然后在服务器上的 ENV 中访问
const crypto = require('crypto');
process.env.BUILD_HASH = crypto.randomBytes(20).toString('hex');
const BUILD_HASH = process.env.BUILD_HASH
console.log('building client')
const config = {
output: {
filename: `bundle_${BUILD_HASH}.js`,
path: path.resolve(__dirname, 'public')
}
};
我不喜欢这个解决方案,因为它需要动态设置 ENV var
解决方案
推荐阅读
- c# - 最小化或背景时的 UWP/C# 后台下载器
- javascript - 如何在我的侧边菜单中单击元素
- angular - Chrome 中的 Angular 6 错误,函数($event)随机抛出错误“无法读取未定义的属性“值””
- ios - iOS branch.io 将用户开发者身份传递给 webhook 中的安装事件
- sql - 无法插入到带有标识列的表中
- sql - SQL Server:分组聚合错误
- javascript - 带有 Electron + React 的视频流:非常奇怪的显示
- c# - 实体框架和约束
- node.js - 打开链接以下载 pdf 仅适用于硬重新加载和开发工具打开
- excel - 将日期转换为日期类型的文本