【问题标题】:RequireJS baseUrl and multiple optimized filesRequireJS baseUrl 和多个优化文件
【发布时间】:2015-02-12 23:13:18
【问题描述】:

我已将我的第 3 方库从我的应用程序代码中分离出来,并将它们全部组合到一个 vendor.js 文件中以供 requirejs 加入。在我的 build.js 文件中,我使用 modules 语法来优化我的主应用程序,不包括供应商脚本,并优化vendor.js 文件。我遇到的唯一问题是当我编译的main 模块请求vendor 时,它从配置文件中获取baseUrl,因此不会加载优化的vendor.js 文件。我的build.js 文件如下所示:

({
    baseUrl: "js",
    dir: "build",
    mainConfigFile: "js/main.js",
    removeCombined: true,
    findNestedDependencies: true,
    skipDirOptimize: true,
    inlineText: true,
    useStrict: true,
    wrap: true,
    keepBuildDir: false,
    optimize: "uglify2",
    modules: [
        {
            name: "vendor"
        },
        {
            name: "main",
            exclude: ["vendor"]
        }
    ]
})

我的main.js 文件如下所示:

requirejs.config({
    baseUrl: "js",
    paths: {
        jquery: 'vendor/jquery/jquery-2.1.3.min',
        bootstrap: 'vendor/bootstrap/bootstrap.min',
        handlebars: 'vendor/handlebars/handlebars-v2.0.0',
        backbone: 'vendor/backbone/backbone-min',
        underscore: 'vendor/lodash/lodash.underscore',
        marionette: 'vendor/marionette/backbone.marionette.min',
        models: 'common/models',
        collections: 'common/collections'
    }
});

define(['module', 'vendor'], function(module) {
    var configPath = "config/config." + module.config().env;
    require([configPath, 'app', 'jquery'], function(config, Application, $) {
        $(function() {
            // Kick off the app
            Application.start(config);
        });
    });
});

所有开发都在js 文件夹中完成,而我的build.js 文件位于该文件夹之外。优化后的文件以build 结尾,是js 的兄弟,但是当我像这样包含我的主文件时:

<script data-main="build/main" src="js/vendor/require/require.max.js"></script>

它最终会为 define() 调用加载 js/vendor.js。我在这里想念什么?如何告诉优化的main 文件加载build/vendor.js,但允许未优化的版本仍然加载js/vendor.js

【问题讨论】:

    标签: requirejs requirejs-optimizer


    【解决方案1】:

    好的,我想通了。这很简单,真的,只是配置过多的情况。当您使用data-main 加载脚本时,baseUrl 是相对于该文件设置的。所以,如果我指定js/mainbaseUrl 将是js。但是,由于我在main.js 的配置块中明确指定了baseUrl,因此在开发和生产中都会被覆盖。通过从main.js 中删除baseUrl: "js",一切都按预期工作。当我将data-main 更改为build/main 时,开发版本会加载与js 相关的所有内容,而生产版本会加载与build 相关的所有内容(vendor.js)。希望有一天这对其他人有所帮助。

    requirejs.config({
        paths: {
            jquery: 'vendor/jquery/jquery-2.1.3.min',
            ...
        }
    });
    
    // 'vendor' is loaded relative to whatever directory main.js is in
    define(['module', 'vendor'], function(module) {
        ...
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多