【发布时间】:2015-10-17 02:48:33
【问题描述】:
我正在使用 node、react 和 requirejs(并从 Typescript 生成符合 AMD 标准的 JS,但我认为这与手头的问题无关)。我只是想在我的应用中要求 React:
// config.js
require.config({
baseUrl: '../scripts/lib/node_modules',
paths: {
lib: '..',
react: 'react/lib',
app: '../../app',
jquery: 'jquery/dist/jquery',
scripts: '../..',
},
});
require(['react/React'], function (react) {
});
然后我将使用 RequireJS 的 data-main api 加载此配置,导航到此页面:
<!DOCTYPE html>
<html>
<head>
<title>My Updated Test Project</title>
<script data-main="../scripts/config.js" src="../scripts/lib/node_modules/requirejs/require.js"></script>
</head>
<body>
<h1>My Test Project</h1>
</body>
</html>
RequireJS 在尝试加载 React 时会报错:
Error: Module name "EventPluginUtils" has not been loaded yet for context: _. Use require([])
在 React.js 中,几乎第一行是“裸需求”
var EventPluginUtils = require("./EventPluginUtils");
如果我阅读 RequireJS 的有关此错误消息的信息,它会说修复是停止使用裸 require。
当有一个 require('name') 调用,但 'name' 模块尚未加载时会发生这种情况。 如果错误消息包括 Use require([]),那么它是一个顶级 require 调用(不是 define() 调用中的 require 调用)应该使用异步回调版本的 require 来加载代码
但我不认为将 React 源更改为使用 AMD 要求是 React 的作者的想法。还有其他选择吗?我是否需要将 React.js requires 的每个模块都列为 shim?这让我觉得有很多前期和维护工作。我是否缺少有关 RequireJS 的一些基本知识? (我是这个模块的新手)。
编辑:
React 被打包为 CommonJS 模块,所以看起来 RequireJS 应该能够加载它:http://requirejs.org/docs/api.html#packages。
但简单地添加包含 React 的 package.json 文件的文件夹的位置似乎并没有让我到达那里。它正在尝试从 baseUrl 加载 react,就好像它没有识别出为该模块 id 配置了一个包。
【问题讨论】: