【问题标题】:RequireJS dependency not definedRequireJS 依赖未定义
【发布时间】:2014-04-14 18:38:49
【问题描述】:

我正在尝试将我在单独的 utils 文件夹中创建的 util.js 文件加载到我的 Backbone 应用程序中,但无论我对 RequireJS 使用什么配置,该文件都是由 Require 加载的(我可以在加载的开发工具中查看它),但在视图本身中始终未定义。据我所知,我似乎已经正确定义了文件并尝试了 RequireJS 配置的所有不同组合 - 在 paths var 中定义路径,定义 paths 和导出名称的 shim,而不是定义它完全在 require 配置中,只是直接在视图定义中声明路径,但它始终未定义。

我的文件夹结构是:


js
 - views
 - controllers
 (etc)
 - utils
   - util.js

我要加载的文件是这样的:

util.js


define(function() {
    return {
        showMessage: function() {
            console.log('show message');
        }
    }; 
});

就像我说的,我尝试了各种 Require 配置。例如,目前我有:


require.config({
    paths : {
        underscore : 'lib/lodash',
        backbone   : 'lib/backbone-1.0.0',
        marionette : 'lib/backbone.marionette-1.1.0',
        jquery     : 'lib/jquery-2.0.3.min',
        //jquery     : 'lib/jquery-2.0.3',
        tpl        : 'lib/tpl',
        pnotify    : 'lib/jquery.pnotify',
        utils      : 'utils/util'
    },
    shim : {
        'lib/backbone-localStorage' : ['backbone'],
        underscore: {
            exports: '_'
        },
        backbone: {
            exports: 'Backbone',
            deps: ['jquery','underscore']
        },
        marionette: {
            exports: 'Backbone.Marionette',
            deps: ['jquery', 'underscore', 'backbone']
        },
        pnotify: ['jquery'],
        utils: {
            exports: 'utils'  
        } 
    }
});

require(['app'],function(app){
    app.start();
});

在调用视图中我有(修改为只显示 utils 导入):

define([
    'utils'
], function (utils) {
    "use strict";

return Marionette.Controller.extend({ 
    initialize: function() {
        console.log(utils); // undefined
    }
});

});

我的所有其他主干代码(视图、模型、集合等)都可以正常加载,但我就是无法加载此文件。我在这里错过了什么?

【问题讨论】:

    标签: backbone.js requirejs


    【解决方案1】:

    您不应该需要 shim 定义。路径声明应涵盖您的用例。

    您定义的 shim 告诉 requirejs 它应该寻找一个名为 'utils' 的全局变量,以提供给任何将 utils/util.js 列为依赖项的模块。由于您在 utils/util.js 中使用 requirejs 语法而不是创建全局,因此不需要 shim。

    【讨论】:

    • 是的,我尝试过不在 RequireJS 配置中添加任何内容,而是将其作为 'utils/util' 传递到视图/控制器回调中,但仍然未定义,但我可以看到它已加载到开发工具中。
    • 将其作为 'utils' 而不是 'utils/util' 传递是 'paths' 配置的功能,而不是 'shim' 配置。您是否尝试过删除 shim 配置并将其引用为“utils”?
    • 我创建了一个工作要点,用最少的代码演示了您的问题中的问题。 gist.github.com/chadxz/10680093 由于 gist 不允许子目录,我将每个文件的位置放在文件顶部的注释中。
    • 感谢您的建议,我已经尝试过(在“路径”中定义utils: 'utils/util',没有填充,但它不起作用。尝试更改将utils 传递到应用程序。 js而不是控制器/视图,但没有运气。
    • 如果你把你的实际代码贴在某个地方,我很乐意在有空的时候看看它
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2014-01-19
    • 2017-06-01
    • 2017-04-16
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多