1

由于项目中的 FUBAR 目录组织,我花了一些时间在所述项目上重新组织 JS 脚本。该项目使用 requirejs 并且在重组之前运行良好。但是,现在在运行时调用或编译(我们使用 r.js 优化器)时不会加载任何内容——尽管编译完成时没有抱怨。我已经检查,仔细检查,三重检查,现在屈服于在 Stack Overflow 上寻求另一双眼睛。

使用 RequireJS:2.1.4 和 r.js 2.1.4

以下是我的配置:

build-js.js(用于优化器)

var requirejs = require('requirejs');

var config = {
    baseUrl: './public/js',
    mainConfigFile: './public/js/config/config.js',
    paths: {
        'requireLib': 'library/require'
    },
    out: ".public/js/minified/main.js",
    name: "minified/main",
    wrap: false,
    preserveLicenseComments: false,
    deps: ["app/main","modules/movie","modules/theatre"]
};

requirejs.optimize(config);

配置.js

// Set the require.js configuration for your application.
require.config({
    paths: {
        // JavaScript folders
        libs: "library",
        plugins: "plugin",
        app: "app",
        adminlibs: "../adminassets/js/plugins/ui",

        // Libraries
        jquery: "library/jquery",
        jqcookie: "library/jquery.cookie",
        jqui: "../adminassets/js/plugins/ui/jquery-ui-1.10.0.custom.min",
        jqezmark: "library/jquery.ezmark",
        jqcolor: "library/jquery.color",
        underscore: "library/underscore-amdjs",
        backbone: "library/backbone-amdjs",
        chosen: "library/chosen.jquery", 
        moment: "library/moment",

        // Site Components 
        site: "app/site",
        sitediscussion: "app/site-discussion",
        namespace: "app/namespace",

        // Plugins
        text: "plugin/text", 
        async: "plugin/async", 
        use: "plugin/use",
        datetimepicker: "../adminassets/js/plugins/ui/jquery.datetimepicker",
        ajaxfileupload: "../adminassets/js/plugins/uploader/jquery.ajaxfileupload"
    },

    shim: {
        'chosen': ['jquery'],
        'jqcookie': ['jquery'],
        'jqui': ['jquery'],
        'jqezmark': ['jquery'],
        'jqcolor': ['jquery'],
        'site': {
            deps: ['jquery','jqezmark','chosen','underscore','namespace','jqui','jqcookie'],
            exports: 'site'
        },
        'sitediscussion': {
            deps: ['jquery', 'underscore'],
            exports: 'sitediscussion'
        },
        'jquifull' : ['jquery'],
        'datetimepicker' : ['jqui'],
        'ajaxfileupload' : ['jquery'],
        'backbone': ['underscore','jquery']
    },

    // Initialize the application with the main application file
    deps: ["app/main"]
});

文件结构如下:

{站点根}/public/js

其中包含目录:

应用配置库缩小模块插件模板

上面在 build-js 和 config.js 中列出的所有文件都被确认在预期的文件夹中。

requirejs 调用如下:

在开发机器上(我目前正在测试设置):
data-main="/js/config/config" src="/js/library/require.js"

在生产中(当前甚至没有创建缩小/主文件,尽管应该创建)
data-main="/js/minified/main" src="/js/library/require.js"

谁能看到我可能做错了什么?同样,除了上面列出的两个文件(build-js.js 和 config.js)之外,站点本身、javascript 等都没有更改。唯一的变化是文件已在目录结构中物理移动。结果,我几乎可以肯定我在某个地方遇到了路径问题,但我似乎找不到它。帮助?

4

1 回答 1

1

已找到解决方案。我通过“/js/config/config”的requirejs包含脚本标签中的data-main属性引用了我的配置文件。尽管我声明了 /public/js 的基本路径,但系统仍在尝试使用 /js/config/ 作为我的基本路径(如 requirejs 文档中所述,如果基本路径未另行声明)。我将 config.js 文件移动到 /js 并将 data-main 更改为 /js/config,现在所有路径都可以正常工作,引用基本路径 /js。

附带说明一下,由于我使用 Zend Framework 和错误处理,我没有注意到文件加载失败。没有 404 错误,我的开发工具的网络选项卡显示成功加载所有 .js 文件......只有当我查看这些文件的响应内容时,我才发现它们吐出 PHP 错误日志而不是比 .js 内容。

于 2013-02-20T16:24:18.907 回答