我有一个使用the创建的React应用程序 CREATE-反应应用内 模块。我最近被客户要求与oidc集成。为此,我正在使用 终极版,OIDC,因为我已经在我的应用程序中使用redux。
我们设法将我的应用程序集成到他们的身份服务器中,我能够登录并获取存储在redux中的用户令牌。问题是我正在努力设置 无声的更新 在我的create-react-app应用程序中,因为我必须添加一个额外的入口点。有没有办法添加额外的入口点 silent_renew/index.js
没有弹出create-react-app?
目前我已经创建了一个名为silent_renew的文件夹,其中包含一个 index.js
文件。该文件夹还包含一个 silent_renew.html
文件中没有太多(参见: 示例应用 类似于我的文件夹结构)。
由于silent_renew的登录页面只是一个简单的html页面,因此您可以绕过webpack。只需将以下文件放在公用文件夹中即可。还包括同一文件夹中的oidc-client.min.js库的副本。
公共/ silent_renew.html:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script src="oidc-client.min.js"></script>
<script>
new Oidc.UserManager().signinSilentCallback().then()
</script>
</body>
</html>
这在我的网站de develepment配置中有效。对于生产配置有以下几点(没有测试它,但我很有信心这是前进的方向......)
公共/ index.js
const express = require('express')
const path = require('path')
const app = express()
app.use(express.static('.'))
app.use((req, res, next) => {
if (path.extname(req.path).length > 0) {
next()
} else if (path.dirname(req.path).indexOf('silent_renew') > -1) {
req.url = '/silent_renew.html'
next()
}
else if (path.dirname(req.path).indexOf('callback') > -1) {
req.url = '/callback.html'
next()
} else {
req.url = '/index.html'
next()
}
})
app.listen(3000)
一旦create-react-app支持多个入口点,我希望很快就会发生企业登录场景,这段代码已经过时了。
如果尚未弹出,则无法添加自定义webpack加载程序:
我们不打算提供Webpack特定的覆盖,因为它将非常脆弱。人们将根据特定的加载器和插件开始,我们将无法改善整体体验。
资源: https://github.com/facebookincubator/create-react-app/issues/99#issuecomment-234657710
如果要添加新的特定条目文件,首先需要 yarn eject
然后编辑 config/webpack.config.dev.js:34
和 config/webpack.config.prod.js:55
。
这同样适用于添加新的webpack加载器。
如前所述,改变webpack配置 create-react-app
会违背这个项目的目的,提供一种方法来做零配置的React。
我担心解决方案是弹出你的应用程序,这是不可逆转的。
完成后,创建 silent_renew
项目根目录下的目录 index.js
和 index.html
文件,创建一个 store
对于redux如所见 这里 (你可能不需要很多这样的东西,比如传说,路由器和记录器中间件,只需要拿走 loadUser
逻辑和商店创建),导入商店 src/index.js
文件并创建一个redux Provider
, 喜欢 这个。
然后,你可以修改 config/webpack.config.dev.js
并按照我们可以看到的 终极版-oihc-示例 webpack conf。加 HtmlWebpackPlugin
和 CommonsChunkPlugin
对于 silentRenew
,以及额外的切入点。
对CRA有点不满的是,他们对dev和prod的webpack配置是完全分离的,不会扩展共享。您必须在prod和dev配置中执行此操作,或者扩展另一个conf文件以防止冗余,例如 这个例如。
我还建议你使用另一个简单的脚手架,当你没有任何特殊的东西时,CRA很好,不像你想要的那样(未来可能更多)。弹出将创建许多您自己的代码库中甚至不需要的文件和代码。我和一个朋友做了一个 极简主义者,但我相信还有很多更好的选择。