相对路径不适用于路径

时间:2012-09-04 20:48:55

标签: path requirejs relative-path

我在requirejs中遇到相对路径问题。

首先,我有以下结构。我正在使用虚拟主机(os.com)运行它,路径是os.com/test

enter image description here

的index.html

<script data-main="config" src="require.js"></script>

config.js

require.config({

  baseUrl: "./apps",
  deps: ['ui'],
  paths: {
    ui: 'ui/ui',
    system: 'system/system',
    core: 'core/core'
  }


});

ui.js

define(['./class/menuBuilder',"./class/window"], function(menuBuilder, windowBuilder){


    return {
        menuBuilder: menuBuilder,
        windowBuilder: windowBuilder
    }

});

当我运行它时,我会收到以下错误。

GET http://os.com/test/apps/class/menuBuilder.js 404 (Not Found)
GET http://os.com/test/apps/class/window.js 404 (Not Found)

如果我从'paths'属性中取出'ui'属性然后将deps更改为['ui / ui'],它会起作用,但我想使用路径。

更改了config.js

require.config({

  baseUrl: "./apps",
  deps: ['ui/ui'],
  paths: {
    system: 'system/system',
    core: 'core/core'
  }


});

如何更改配置以使路径和相对路径一起工作?

2 个答案:

答案 0 :(得分:12)

我有类似的问题。我没有deps:'ui'参与我的配置,只是路径设置,但仍然相对模块引用('./class/menuBuilder')无法从加载路径的模块(“ui:'ui)起作用/ ui'“)并将使用baseUrl。为了解决这个问题,我将'ui'定义为一个包:

require.config({

  baseUrl: "./apps",
  deps: ['ui'],
  paths: {
    system: 'system/system',
    core: 'core/core'
  },
  packages : [
    { 
        name: 'ui',
        location : 'ui',
        main : 'ui'
    },
  ]

});

在这种情况下,require将正确加载相对模块的模块。

这是一篇有用的帖子:Relative paths with RequireJS modules/packages

答案 1 :(得分:4)

此处的解决方案是使用地图配置,而不是路径配置。路径配置应仅用于文件夹,而不是模块本身。地图配置适用于各个模块。

所以试试:

require.config({
  map: {
    '*': {
      'ui': 'ui/ui'
    }
  }
});