将 React App 拆分为 2 个独立的部分

IT技术 reactjs react-router
2021-05-15 09:13:00

我正在开发的应用程序(Node.js + Express + React + Alt)面向 2 类人群 - 教师,它是一个具有多条路线的大型应用程序,以及学生,它是一个非常小的应用程序单一路线。

我想把这两个部分完全分开,所以在渲染路由teachers时不会加载部分的代码students

我有两个原因:

  1. 为学生的应用程序提供更好的加载时间 - 当我知道不需要时,下载和运行大块 JavaScript 是没有意义的。
  2. 安全方面——虽然没有数据泄露,但我还是宁愿对学生隐藏老师使用的代码。

是否有捷径可寻?
我可以使用一个 React 应用程序(和一个 React-Router)吗?

谢谢你的帮助!

1个回答

实现这一点的最佳方法是使用 Webpack 功能Code Spliting 这允许您自动将代码分成块,并仅在需要时加载所需的代码。

你可以看到 React Router 的例子:huge-apps

魔法发生在内部组件(require('./routes/*'))中,这里他们使用回调方法来获取组件,看起来像这样:

export default {
  path: 'nameOfComponent',
  getComponent(location, cb) {
    require.ensure([], (require) => {
      cb(null, require('./components/nameOfComponent'))
    })
  }
}

Require.ensureWebpack检测到并生成一个包含所有代码及其内部依赖项的新块。

当应用程序在浏览器中执行时,第一次加载只获取带有路由定义的主块,并且每个路由器组件都是按需加载的(当你改变路由时)。

对我来说,这是最干净的方法。因为您将责任委托给构建系统。在 Webpack 2 中,你可以使用System.import而不是 require.ensure,这是一个更 ES6 的标准。