我下载了 RequireJS 单页应用示例。在 www/lib 文件夹中,我放置了 XRegExp 源代码xregexp-all.js(版本 2.0.0)。
在 www/app/main.js 中,我添加了:
var xregexp = require('xregexp-all');
print(typeof(xregexp));
控制台输出为:
不明确的
但是,requireJS 不会发出任何错误消息。难道我做错了什么?
我下载了 RequireJS 单页应用示例。在 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,或者您必须使用调用定义的文件版本,例如这个是 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 的模块的方式。
在库的源代码中快速搜索“amd”或“define”应该是判断它是否支持 AMD 方案的最快方法。如果不是,那么它不是(doh!)
但是,如果库公开了全局变量,那么您可以使用 RequireJSshim
来加载它以及path
告诉 RequireJS 在哪里检索它。
// Exporting a traditional library through RequireJS
require.config({
paths : {
jaykweri : 'path/to/jQuery' // moduleName : pathToModule
},
shim : {
jaykweri : {exports : '$'} // exporting the global
}
});
// Using that library in requireJS
define(['jaykweri'],function(globl){
// globl === $
});