Requirejs插件不适用于shim / deps / paths

时间:2016-06-30 23:15:53

标签: javascript plugins requirejs shim

我对RequireJS有一个大问题。我写了一个插件,插件运行良好。它不使用define。当我使用requirejs(["myplugin!path..."]...时,它完美无缺:

requirejs.config({
    baseUrl: "/",
    paths: {
        "myplugin" : "path to plugin code ..."
    }
});
requirejs(["myplugin!path..."], function (something) {
    //works perfectly
});

问题出在哪里?问题是当我尝试使用requirejs配置时,例如:

requirejs.config({
    baseUrl: "/",
    paths: {
        "myplugin" : "path to plugin code ...",
        "loadWithPlugin": "myplugin!path..."
    }
});
requirejs(["loadWithPlugin"], function (something) {
    //Ignores the plugin totaly...
});

这样,RequireJS会忽略该插件。这意味着我无法将shimdeps以及map用于不同的版本等。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

plugin!module语法作为模块名称是有意义的。但是,paths设置将模块名称映射到路径,路径不是模块名称。因此,如果您将其作为paths中的值,!之前的文本将不会被解释为插件。

您可以改用map。它将模块名称映射到模块名称。 foo解析为myPlugin!moduleA的示例:

  require.config({
    baseUrl: "js",
    paths: {
      myPlugin: "lib/myPlugin",
    },
    map: {
      "*": {
        foo: "myPlugin!moduleA",
      },
    }
  });

  require(["foo"], function (q) {
     console.log("Q");
  });