RequireJS 模块/包的相对路径

2024-04-06

我对 RequireJS 还很陌生,并且遇到了一些问题。我使用 RequireJS 编写了一个基于 Backbone 构建的小框架,我希望它可以在不同的项目中重复使用。因此,通过一些搜索,我了解到 require 允许包。这似乎就是我正在寻找的。我有一个 main.js 文件来启动我的应用程序,其本质上如下所示:

require.config({
  packages: ['framework']
});

require(['framework'], function(framework) {
  framework.createDash();
});

然后,在与 main.js 相同的目录中,我有另一个名为“framework”的目录,其中包含另一个 main.js,如下所示:

define(function(require, exports, module) {
  exports.createDash = function(dash, element) {
    require(['dash/dash.model', 'dash/dash.view'], function(DashModel, DashView) {
      return new DashView({
        model: new DashModel(dash),
        el: element ? element : window
      });
    });
  };
});

在搜索中我发现这一页 http://groups.google.com/group/requirejs/browse_thread/thread/ce22a2eaa59cf6fc这表明“require”参数的作用域应该是子模块。然而,当我尝试要求一些东西时,它们仍然与我原来的 main.js 相关。我尝试了很多方法并搜索了几个小时但无济于事。有什么方法可以让我的包中的 require/define 调用相对于根目录中的 main.js 包含在内?


您需要在 require 配置中将子模块定义为包:

require.config({
  packages: [
    { name: 'packagename',
      location: 'path/to/your/package/root',  // default 'packagename'
      main: 'scriptfileToLoad'                // default 'main' 
    }]
  ... some other stuff ...
});

要加载您的模块,您只需根据要求使用您的“包名称”:

define(['jquery', 'packagename'], function($, MyPackage) {
  MyPackage.useIt()
});

在你的包中你必须使用./加载相对于子模块的文件的前缀:

define(['globalDependency', './myLocalFile'], function(Asdf, LocalFile) {
  LocalFile.finallyLoaded();
});

有一个有用的快捷方式:如果您的包名称等于您的位置并且您的主文件名为“main.js”,那么您可以替换它

  packages: [
    { name: 'packagename',
      location: 'packagename',
      main: 'main'
    }]

to this:

  packages: ['packagename']

据我所知,您已经尝试定义一个包,但您是否也使用了 ./ 前缀?如果没有此前缀,require 将尝试在其全局根路径中查找文件。而且没有包裹,./将是无用的,因为相对路径与全局根路径相同。


Cheers

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RequireJS 模块/包的相对路径 的相关文章

随机推荐