【问题标题】:RequireJS how specify shim dependency from jam file package sectionRequireJS 如何从 jam 文件包部分指定 shim 依赖项
【发布时间】:2012-12-31 18:14:13
【问题描述】:

我正在一个带有骨干样板的项目中工作,该项目使用 RequireJS 加载模块并使用 JamJS 来管理它们。 我的requireconfig.js文件如下:

require.config({
  deps: ["../vendor/jam/require.config", "main"],
  paths: {
    "backbone.localStorage": "../vendor/backbone.localStorage-1.0/backbone.localStorage"
  },
  shim: {
    "backbone.localStorage": {
        deps: ['backbone']
    }
  }
});

您可以从 jam 配置文件 jam/require.config.js 中看到 RequireJS 加载配置,它指定了主干、jquery 和下划线。接下来是一段文件:

    "packages": [
        {
            "name": "backbone.layoutmanager",
            "location": "../vendor/jam/backbone.layoutmanager",
            "main": "backbone.layoutmanager.js"
        }
        {
            "name": "backbone",
            "location": "../vendor/jam/backbone",
            "main": "backbone.js"
        }
    ],
    "version": "0.2.11",
    "shim": {
        "backbone.layoutmanager": {
            "deps": [
                "jquery",
                "backbone",
                "lodash"
            ],
            "exports": "Backbone.LayoutManager"
        }
        "backbone": {
            "deps": [
                "jquery",
                "lodash"
            ],
            "exports": "Backbone"
        }
    }
};

我想要在我的config.js 中指定主干.localStorare 库取决于包部分中定义的主干。 另外,如果我按如下方式指定主干路径,那么它会找到主干库,但会发现一条错误消息,指出未加载下划线:

require.config({
  deps: ["../vendor/jam/require.config", "main"],
  paths: {
    "backbone": "../vendor/jam/backbone/backbone",
    "backbone.localStorage": "../vendor/backbone.localStorage-1.0/backbone.localStorage"
  },
  shim: {
    "backbone.localStorage": {
        deps: ['backbone']
    }
  }
});

我可以使用 jamjs 添加backbone.localStorage 库,但可用包的版本很旧,所以我更喜欢手动下载最后一个并手动包含。

任何想法或帮助将不胜感激。

【问题讨论】:

    标签: requirejs amd jamjs


    【解决方案1】:

    感谢 asgoth,我可以解决问题。我把文件放在下面。

    使用此配置,我可以将 shim 库放在我的 config.js 文件中,该文件取决于 require.config.js 文件中的 jam 管理的包。

    config.js

    // Set the require.js configuration for your application.
    require.config({
    
      // Initialize the application with the main application file and the JamJS
      // generated configuration file.
      deps: ["../vendor/jam/require.config", "main"],
    
      // Packeges defined at jam/require.config.js required by shim libraries
      packages: [
        {"name" : "backbone"}, 
        {"name" : "jquery"}
      ],
    
      paths: {
        // Put paths here.
        "codemirror" : "../vendor/codemirror-3.0/lib/codemirror",
        "codemirror-markdown": "../vendor/codemirror-3.0/mode/markdown/markdown",
        "backbone.localStorage": "../vendor/backbone.localStorage-1.0/backbone.localStorage",
        "bootstrap" : "../vendor/bootstrap-2.2.2/js/bootstrap"
      },
    
      shim: {
        // Put shims here.
        "codemirror-markdown": {
          deps: ["codemirror"]
        },
        "backbone.localStorage": {
          deps: ['backbone']
        },
        "bootstrap": {
          deps: ['jquery']
        }
      }
    
    });
    

    require.config.js

    var jam = {
        "packages": [
            {
                "name": "jquery",
                "location": "../vendor/jam/jquery",
                "main": "jquery.js"
            },
            {
                "name": "backbone.layoutmanager",
                "location": "../vendor/jam/backbone.layoutmanager",
                "main": "backbone.layoutmanager.js"
            },
            {
                "name": "underscore",
                "location": "../vendor/jam/underscore",
                "main": "underscore.js"
            },
            {
                "name": "backbone",
                "location": "../vendor/jam/backbone",
                "main": "backbone.js"
            },
            {
                "name": "lodash",
                "location": "../vendor/jam/lodash",
                "main": "./lodash.js"
            }
        ],
        "version": "0.2.11",
        "shim": {
            "backbone.layoutmanager": {
                "deps": [
                    "jquery",
                    "backbone",
                    "lodash"
                ],
                "exports": "Backbone.LayoutManager"
            },
            "underscore": {
                "exports": "_"
            },
            "backbone": {
                "deps": [
                    "jquery",
                    "lodash"
                ],
                "exports": "Backbone"
            }
        }
    };
    
    if (typeof require !== "undefined" && require.config) {
        require.config({packages: jam.packages, shim: jam.shim});
    }
    else {
        var require = {packages: jam.packages, shim: jam.shim};
    }
    
    if (typeof exports !== "undefined" && typeof module !== "undefined") {
        module.exports = jam;
    }
    

    【讨论】:

      【解决方案2】:

      骨干需要Underscore & jQuery:

      shim: {
          "backbone": {
             "deps": [ "underscore", "jquery" ],
             "exports": "Backbone"  //attaches "Backbone" to the window object
          },
          "underscore": {
             "exports": "_"
          }
      }
      

      所以我认为你最好调整你的jam/require.config.js

      编辑:

      接下来,您问题中的packages 部分,是jam/require.config.js 的一部分吗?位置是否相对于jam/require.config.js 的位置?

      您是否尝试在自己的 config.js 中添加 packages 部分:

      "packages": ["backbone", "backbone.layoutmanager"]
      

      【讨论】:

      • 是的,我知道这种依赖关系。我想知道是否有一种方法可以指定包部分中指定的 shim 依赖项。
      • 感谢上次更新对我的帮助。我也做了一个答案来展示我最后写的两个文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2021-01-08
      • 2013-07-17
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多