问题 向React添加静默续订入口点(create-react-app)


我有一个使用the创建的React应用程序 CREATE-反应应用内 模块。我最近被客户要求与oidc集成。为此,我正在使用 终极版,OIDC,因为我已经在我的应用程序中使用redux。

我们设法将我的应用程序集成到他们的身份服务器中,我能够登录并获取存储在redux中的用户令牌。问题是我正在努力设置 无声的更新 在我的create-react-app应用程序中,因为我必须添加一个额外的入口点。有没有办法添加额外的入口点 silent_renew/index.js 没有弹出create-react-app?

目前我已经创建了一个名为silent_renew的文件夹,其中包含一个 index.js 文件。该文件夹还包含一个 silent_renew.html 文件中没有太多(参见: 示例应用 类似于我的文件夹结构)。


8332
2018-05-12 13:08


起源

的目的 create-react-app 是提供一种简单的零配置应用程序方式。堵 loadUser 与商店没关系,但我担心更改webpack配置并添加此入口点将违反CRA是什么,并需要弹出。可能不是你正在寻找的答案,留下它作为评论,但告诉我,如果这可能是一个。 - Aperçu
谢谢@Aperçu。是的,这是我通过100个帖子阅读的假设。我根本不熟悉Webpack!我确实弹出了我的应用程序,但不确定如何添加额外的入口路径到我的应用程序。我到处寻找,但似乎没有太多关于向弹出的create-react-app webpack配置文件添加入口点,除非我错过了它。你知道怎么样甚至更好吗?你知道怎么做吗?如果您这样做,请将其添加为答案。如果它有效,我会立即奖励赏金。 - Herm


答案:


由于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支持多个入口点,我希望很快就会发生企业登录场景,这段代码已经过时了。


10
2018-05-17 10:43





如果尚未弹出,则无法添加自定义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加载器。


0
2018-05-14 17:22



谢谢@enapupe。不知道最好的方法是什么?我最终弹出了我的配置。通过webpack配置查看弹出并尝试添加新路径。无法让它运作。因为我从未有过这个要求,所以我对Webpack并不太了解。看了google上的很多帖子,但关于create-react-app这个主题的信息不多 - Herm
很抱歉听到这个消息。我认为你应该专门为这个新问题开一个新问题。我建议您共享一些文件,以便我们可以重现出错的地方。你有任何错误吗?究竟什么不起作用? - enapupe


如前所述,改变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很好,不像你想要的那样(未来可能更多)。弹出将创建许多您自己的代码库中甚至不需要的文件和代码。我和一个朋友做了一个 极简主义者,但我相信还有很多更好的选择。


0
2018-05-14 17:36