RequireJS:如何从一个模块加载多个功能?

use*_*495 2 javascript requirejs

我有一个需要返回3个函数的模块,我写了这样的模块(抱歉所有returns,我直接从coffeescript翻译了这个):

(function() {
  define("inColor", [], function() {
    var init;
    init = function(value, obj) {
      var foundVal;
      foundVal = void 0;
      $.each(obj, function(key, val) {
        if (value === key) {
          foundVal = val;
        }
      });
      return foundVal;
    };
    return init;
  });

  define("fillColor", ['inColor'], function(inColor) {
    var capletColor, init;
    capletColor = {
      primary: "#3DA0DB",
      info: "#B5D1D8",
      success: "#2ECC71",
      warning: "#FFCC33",
      danger: "#E15258",
      inverse: "#62707D",
      theme: "#f37864",
      "theme-inverse": "#6CC3A0",
      palevioletred: "#913B53",
      green: "#99CC00",
      lightseagreen: "#1ABC9B"
    };
    init = function(obj) {
      var codeColor;
      inColor = inColor(obj.data("color") || obj.data("toolscolor"), capletColor);
      codeColor = inColor || obj.data("color") || obj.data("toolscolor");
      return codeColor;
    };
    return init;
  });

  define("rgbaColor", [], function() {
    var init;
    init = function(hex, opacity) {
      var b, bigint, g, r;
      bigint = parseInt(hex.replace("#", ""), 16);
      r = (bigint >> 16) & 255;
      g = (bigint >> 8) & 255;
      b = bigint & 255;
      if (opacity || opacity <= 1) {
        return "rgba(" + r + "," + g + "," + b + "," + (opacity || 1) + ")";
      } else {
        return "rgb(" + r + "," + g + "," + b + ")";
      }
    };
    return init;
  });

  define('colorModuleLoader', ['inColor', 'fillColor', 'rgbaColor'], function(inColor, fillColor, rgbaColor) {
    return {
      inColor: inColor,
      fillColor: fillColor,
      rgbaColor: rgbaColor
    };
  });

}).call(this);
Run Code Online (Sandbox Code Playgroud)

现在我像这样加载我的模块:

require(['tmp/assets/scripts/admin/modules/caplet.color'], function(colorModuleLoader) {
    return window.alert(colorModuleLoader.rgbaColor("#F37864", 0.1));
  });
Run Code Online (Sandbox Code Playgroud)

模块已加载,但错误说colorModuleLoaderundefined当我尝试提醒值时,有人可以解释原因吗?

Lou*_*uis 7

就RequireJS而言,那里有四个模块,它们都在一个文件中.(与define调用一样多的模块.)RequireJS正常运行的基本规则是每个文件应该有一个模块,并且您的define调用不应该命名它们的模块.(优化器r.js添加了模块名称.)这些规则有一些例外,但你真的需要知道你在做什么才能使用这些异常(并且能够解释为什么你需要做一些不同于基本规则的事情).

你可以做的是让你的tmp/assets/scripts/admin/modules/caplet.color.js文件包含一个导出你需要的所有功能的模块:

define(function() {

    function inColor() {...}

    function fillColor() {...}

    function rgbaColor() {...}

    return {
      inColor: inColor,
      fillColor: fillColor,
      rgbaColor: rgbaColor
    };    

});
Run Code Online (Sandbox Code Playgroud)