Requirejs正在寻找错误的道路

时间:2014-02-19 21:08:40

标签: requirejs

这是/themes/ifd/js/文件夹中的配置文件:

require.config({
    // Initialize the application with the main application file
    deps: ['plugins/console', 'main'],
    baseUrl: '/themes/ifd/js/components'
    paths: {
        jquery: 'jquery/jquery.min',
        flexslider: 'flexslider/jquery.flexslider-min',
        easydropdown: 'easydropdown/jquery.easydropdown.min',
        bpopup: 'bpopup/jquery.bpopup.min',
        jqrangeslider: 'jqrangeslider/jQRangeSlider',
        jqueryui: 'jquery-ui/js/jquery-ui-1.10.4.custom.min'
        // More additional paths here
    },
    shim: {
        jqueryui: 'jquery'
    },
    // Prevent caching issues, by adding an additional URL argument
    urlArgs: 'bust=' + (new Date()).getDate()
});

我在/themes/ifd/js文件夹中也有一个main.js文件:

require([
    // Require the modules
    'modules/module',
    'jquery',
    'flexslider',
    'easydropdown',
    'bpopup',
    'jqueryui',
    'jqrangeslider'
], function (module) {
    'use strict';
    // Rest of a file

其余文件(模块?)在/themes/ifd/js/components内:

Screenshot of list of files

在我的HTML中,我有:

<script data-main="/themes/ifd/js/main" src="/themes/ifd/js/requirejs.js"></script>

我在Chrome控制台中看到的消息:

GET http://DOMAIN/themes/ifd/js/jquery.js 404 (Not Found) requirejs.js:34
GET http://DOMAIN/themes/ifd/js/flexslider.js 404 (Not Found) 

我找不到有什么问题以及为什么它不在组件目录中搜索...

3 个答案:

答案 0 :(得分:3)

requirejs的入口点是html文件中指定的主要模块。

<script data-main="/themes/ifd/js/main" src="/themes/ifd/js/requirejs.js"></script>

requirejs loads'/themes/ifd/js/main.js'1st。现在在main.js文件中,require([...])尝试加载args中指定的模块,但requirejs将无法找到它们。

原因是requirejs不知道它们,因为require.config(...)没有被执行。

需要'/themes/ifd/js/main.js'中的'require.config(...)'才能进行所有设置

这是working example。它包括Requirejs,jQueryMobile,Backbone和Marinonette。

index.html文件中,您需要指定要加载的requirejs的主模块。

<script type="text/javascript" data-main="js/main" src="js/libs/require-2.1.2.min.js"></script>

在此示例中,主模块位于"js/main.js"

在main.js中,指定require.config并使用define加载模块。

答案 1 :(得分:1)

您向我们展示的网络活动表明您的配置完全被RequireJS忽略。你说&#34;然后我在我的html&#34;:

中有
<script data-main="/themes/ifd/js/main" src="/themes/ifd/js/requirejs.js"></script>

您已经展示了/themes/ifd/js/main.js的内容,但它不包含您的配置,这显然位于不同的文件中。

此处的解决方案是在致电require.config之前将您的main.js电话转移到require文件中。

答案 2 :(得分:0)

看起来您只是加载main.js并且从不告诉RequireJS使用您的配置。

此RequireJS issue列出了加载配置和主要的几种方法 -

  
      
  1. 在您需要顶级模块之前将配置放在HTML上。
  2.   
  3. 使用另一个标记加载config.js.
  4.   
  5. 对HTML文件执行嵌套的require()(需要配置而不是主要的)。
  6.   
  7. 在main.js中执行嵌套的require()。
  8.   
  9. 将配置保留在main.js
  10. 中         

    最好的方法会因项目结构的不同而有所不同,因为我通常对所有页面都有一个入口点,所以我比其他方式更频繁地进行5种方式,但在某些情况下我使用了1和2。 / p>

在页面的下方还会显示这些方法的一些代码示例。