我下载了RequireJS单页应用程序sample。在www / lib文件夹中,我将XRegExp源xregexp-all.js(版本2.0.0)放入。

在www / app / main.js中,我添加了:

var xregexp = require('xregexp-all');
print(typeof(xregexp));


控制台输出为:


  未定义


但是,requireJS不会发出任何错误消息。难道我做错了什么?

最佳答案

是的,您做错了。仅为XRegExp分发的文件的某些版本会执行所需的define调用,该调用将它们定义为RequireJS模块。您正在使用的那个不包含该呼叫。您可以通过在文件中搜索define(字符串来自己确定。

您需要在配置中添加shim,以便RequireJS可以加载XRegExp,或者您必须使用调用define的文件版本,例如实例this one,即XRegExp 3.0.0(仍为alpha)。 )。如果您想使用2.x,那么您的配置将类似于:

paths: {
    xregexp: "../whatever/your/path/actualy/is/xregexp-all"
}

shim: {
    xregexp: {
      exports: "XRegExp",
    },
}


请注意,此配置将模块名称标准化为xregexp,因此您必须将其要求为xregexp,而不是xregexp-all。通常,我不希望模块名称中包含-all.min之类的东西,因为这些情况可能会根据情况而改变。

shim告诉RequireJS,当需要xregexp时应导出的值是全局符号XRegExp的值。通常,这就是您处理不支持AMD的模块的方式。

07-24 17:08