node.js - React + react-router `require.ensure 按需加载 服务端渲染出错`

浏览:29日期:2022-10-07

问题描述

我尝试使用require.ensure这个去做实现了按需加载的效果,但是因为我这边有做服务端渲染,所以现在是前端和服务端公用了一个路由控制器:

const routes = { component: Shell(Init), childRoutes: [{ path: ’login’, getComponent: (nextState, cb) => {require.ensure([], (require) => { cb(null, require(’../containers/login’))}) }} ]};

但是在服务端执行却报错了:

TypeError: require.ensure is not a function at Object.getComponent (D:/luoo/nodejs/app/routes/routes.jsx:49:25) at getComponentsForRoute (D:luoonodejsnode_modulesreact-routerlibgetComponents.js:29:16) at D:luoonodejsnode_modulesreact-routerlibgetComponents.js:41:5 at D:luoonodejsnode_modulesreact-routerlibAsyncUtils.js:84:5 at Array.forEach (native) at mapAsync (D:luoonodejsnode_modulesreact-routerlibAsyncUtils.js:83:9) at getComponents (D:luoonodejsnode_modulesreact-routerlibgetComponents.js:40:28) at finishEnterHooks (D:luoonodejsnode_modulesreact-routerlibcreateTransitionManager.js:112:35) at runTransitionHooks (D:luoonodejsnode_modulesreact-routerlibTransitionUtils.js:50:5) at runEnterHooks (D:luoonodejsnode_modulesreact-routerlibTransitionUtils.js:93:10)

这个有哪个方案可以解决呢?

问题解答

回答1:

webpack target 为 node 的情况下,require 为原生 node.js 的 require,没有 require.ensure 方法.

你可以针对服务器环境写一个 shim

相关文章: