【问题标题】:Why isn't this RequireJS shim working for react-router为什么这个 RequireJS shim 不适用于 react-router
【发布时间】:2014-11-08 06:30:02
【问题描述】:

我正在尝试通过 require 将 react 和 react-router 加载到我的应用程序中。我必须遵循 shim 设置,但我仍然收到一个错误,即 react-router 没有获得正确的 React 对象。

  paths:   {
    domReady:       '../lib/requirejs-domready/domReady',
    react:          '../lib/react/react',
    'react-router': '../lib/react-router/dist/react-router'
  },
  shim:    {
    'react':        {
      exports: 'React'
    },
    'react-router': {
      deps:    ['react'],
      exports: 'ReactRouter'
    }
  }

  require(['domReady!', 'react', 'react-router'], ...


Uncaught TypeError: Cannot read property 'createClass' of undefined react-router.js:372
../utils/withoutProperties react-router.js:1
s react-router.js:1
(anonymous function) react-router.js:62
./Route react-router.js:1
s react-router.js:1
(anonymous function) react-router.js:886
./actions/LocationActions react-router.js:1
s react-router.js:1
e react-router.js:1
(anonymous function) require.js:1658
context.execCb require.js:874
Module.check require.js:1151
Module.enable require.js:782
Module.init require.js:1178
callGetModule require.js:1552
context.completeLoad require.js:1679
context.onScriptLoad

所有东西都是通过 Bower 安装的。 React 是 0.11.1,路由器是 0.7.0

【问题讨论】:

  • 你是用bower安装react-router吗?

标签: requirejs reactjs react-router


【解决方案1】:

源码中显示 react-router 只有在设置了 window.Reactglobal.React 时才能工作。 React 本身不会在 RequireJS 环境中暴露 global 对象。所以我最终写了一个垫片。

paths:   {
  domReady:       '../lib/requirejs-domready/domReady',
  react:          '../lib/react/react',
  'react-router': '../lib/react-router/dist/react-router',
  'react-router-shim': 'react-router-shim'
},
shim:    {
  'react-router-shim': {
    exports: 'React'
  },
  'react-router': {
    deps:    ['react-router-shim'],
    exports: 'ReactRouter'
  }
}

反应路由器垫片:

define(['react'], function(React) {
  "use strict";

  window.React = React;
});

然后我可以使用 react 和 react-router 作为正确的依赖项。

【讨论】:

  • 我已经做到了。但是无法让 requirejs 优化器使用它。当它全部捆绑时,它让我着迷:Uncaught Error: app missing react-router 在浏览器控制台中。
  • @Spoeken 对不起,我还没有在项目中添加 r.js 优化,所以我无能为力。如果您找到解决方案,请发布答案或编辑此答案。
  • 在这里发布了一个问题:stackoverflow.com/questions/28172896/…
  • 很好的解决方法。我发现这在没有实际 shim 模块的情况下也可以使用 init 函数:shim: { "react-router": { deps: ['react'], exports: 'ReactRouter', init(React) { window.React = React; } } }
猜你喜欢
  • 2016-11-03
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 2017-06-22
  • 2021-07-19
相关资源
最近更新 更多