requireJS-多页垫片中的匿名define()模块不匹配

requireJS-多页垫片中的匿名define()模块不匹配,requirejs,amd,Requirejs,Amd,我在这里遵循多页垫片共享模式: 我使用相同的common.js,并且有一个非常相似且简单的设置: <script src="js/library/requirejs/require.min.js"></script> <script> require(['./js/config/common'], function (common) { //go on... }); </script> require(['./js/config/comm

我在这里遵循多页垫片共享模式:

我使用相同的common.js,并且有一个非常相似且简单的设置:

<script src="js/library/requirejs/require.min.js"></script>
<script>
require(['./js/config/common'], function (common) {
  //go on...
});
</script>

require(['./js/config/common'],函数(common){
//继续。。。
});

一切都很好,我可以继续在require闭包中运行操作,但我在Firefox中不断收到错误,抱怨匿名define()模块与上述代码不匹配。考虑到它是多么简单,而且我几乎完全遵循示例模式,我有点困惑为什么我会得到它。我没有在任何地方使用define()。在过去的24天里,requireJS中有什么变化吗(自从多页git回购协议更新以来)?

很清楚发生了什么。您正在尝试加载模块,但您的common.js只有require.config,没有模块。因此,更新的RequireJS(不是Firefox)会抛出一个错误。在公共JS中包含define,错误应该会消失

// common.js stuff...
define({});

答案是这样的,希望它能帮助某人:

考虑到这是一个大平台,许多其他的东西都在require流之外加载(我们正在缓慢地进行转换)

其中一些资产,如jquery 1.10、spin.js等,与AMD兼容,并调用define()。在spin.js的例子中,它匿名调用define(),正如解析文档中不匹配匿名错误的第二点所解释的那样,这会导致加载失败


好悲伤。

恐怕不是这样,RequireJS并不严格要求加载AMD定义。此外,代码不是用示例模式包装的模块,而是由接近RequireJS项目的人编写的。最后,我尝试了一下,但仍然得到了错误。谢谢你的努力!您是否可以发布一个自包含的JSFIDLE来说明这个问题?您说它与示例“非常接近”,但“非常接近”的确切程度是多少?-)不幸的是,我正在一个巨大的平台上工作,如果我将上面所做的工作分解成JSFIDLE,它就可以正常工作。因此,我认为可能存在问题或与页面上的其他内容冲突。不过有一点需要注意——如果只是在common.js中放置一个空的define(function(){}),那么不会抛出错误,只要我引用requirejs.config()(即使没有参数),我就会得到错误……好的,我相信问题与这里的问题相同,因为在匿名模块定义中使用requirejs时会出现问题。文档说这是一个不使用优化器的问题,并说使用优化器来解决它。问题是——我们在进行开发时,比如在一个未优化的环境中工作时,究竟应该如何避开它呢?如果我在//继续之前加上一个alert(),更奇怪的是。。。错误没有发生。您是否给了“违规”文件一个ID?没有,因为我们不想更改第三方源代码,我们只是咬紧牙关,做了一些结构上的更改——要么从RequireJS流中删除所有违规库的加载(然后全局引用该内容),要么反之亦然,将库限制为仅要求流使用。我理解您如何将有问题的库带入Require。我不理解第一个例子,我认为这可能是我需要的解决方案。-您说过“我们从RequireJS流中删除了所有有问题的库的加载”。从你最初的问题来看,我认为我们已经从你的requreJS流中分离出了有问题的JS文件。(我的情况也是如此)。我不能把它们带进来。例如,我们在Handlebar和jQuery上有很多不匹配的地方,因为它们在流中和流外都被大量使用,并导致冲突。因此,我们只需删除Require中对jQuery和H-bar的所有引用,并让整个RJS流在第一个Require()启动之前将它们作为全局变量进行引用。这并不理想,因为我们正努力朝着需求的方向发展,但我们必须同时做到这一点。是的,在Require()开始之前,删除Require流中正在调用的任何命名模块,然后加载它。