为什么这个RequireJS垫片不适用于react-router

Chr*_*org 2 requirejs reactjs react-router

我试图通过require获得反应和反应路由器加载到我的应用程序.我必须遵循垫片设置,但我仍然得到一个错误,其中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
Run Code Online (Sandbox Code Playgroud)

通过Bower安装的一切.React是0.11.1,路由器是0.7.0

Chr*_*org 10

它出现在该反应路由器,如果只会工作的源window.Reactglobal.React设置.React本身不会global在RequireJS环境中公开对象.所以我最后写了一个垫片.

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'
  }
}
Run Code Online (Sandbox Code Playgroud)

反应路由器-垫片:

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

  window.React = React;
});
Run Code Online (Sandbox Code Playgroud)

然后我可以使用react和react-router作为适当的依赖项.