XRegExp与RequireJS兼容吗?

时间:2014-08-25 17:22:19

标签: javascript requirejs xregexp

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

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

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

控制台输出是:

  

未定义

但是,requireJS不会发出任何错误消息。我做错了吗?

2 个答案:

答案 0 :(得分:1)

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

您需要在配置中添加shim,以便RequireJS可以加载XRegExp,或者您必须使用调用define的文件版本,例如{{3这是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的模块的方式。

答案 1 :(得分:0)

在库的源代码中快速搜索“amd”或“define”应该是判断它是否支持AMD方案的最快方法。如果没有,那就不是(doh!)

但是,如果库公开了全局变量,那么您可以使用RequireJS shim加载它以及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 === $
});