RequireJS+;优化器包括在主文件上定义的模块

RequireJS+;优化器包括在主文件上定义的模块,requirejs,optimization,Requirejs,Optimization,我第一次使用优化器,遇到了一些问题 我正在尝试优化一个主文件,它像我预期的那样放置jQuery、主干和Require模块(然后在整个导航中使用)。但是假设我有一个jQuery插件,可以在几个视图上使用。我尝试使用build.js文件上的“include”选项将其添加到主文件中。它添加了它(例如jQuery幻灯片),但由于我有一个带有define的视图(“jQuery幻灯片”)(同样是一个示例),浏览器再次加载插件的文件。即使它位于主生成文件上 这会发生吗?我能修好这个吗 谢谢 下面是一些代码。希

我第一次使用优化器,遇到了一些问题

我正在尝试优化一个主文件,它像我预期的那样放置jQuery、主干和Require模块(然后在整个导航中使用)。但是假设我有一个jQuery插件,可以在几个视图上使用。我尝试使用build.js文件上的“include”选项将其添加到主文件中。它添加了它(例如jQuery幻灯片),但由于我有一个带有define的视图(“jQuery幻灯片”)(同样是一个示例),浏览器再次加载插件的文件。即使它位于主生成文件上

这会发生吗?我能修好这个吗

谢谢

下面是一些代码。希望有帮助()

build.js

{
baseUrl: "javascripts/",
appDir: "..",
dir: "dist",
name: "main-site",

include: ['libs/requirejs/require', jquery-slides'],
insertRequire: ['main-site'],

paths: {
    "main-site": 'main-site',
    'jquery': 'libs/jquery/jquery',
    'jquery-slides': 'libs/jquery/plugins/slides.min.jquery'

}
}
require.config({
baseUrl: "/javascripts/",
paths: {
    'jquery': 'libs/jquery/jquery',
    'underscore': 'libs/underscore/underscore',
    'bootstrap': 'libs/bootstrap/bootstrap.min',
    'datepicker': 'libs/bootstrap/plugins/bootstrap-datepicker',
    'backbone': 'libs/backbone/backbone.max',
    'backbone-paginator': 'libs/backbone/plugins/backbone.paginator',
    'backbone-validation': 'libs/backbone/plugins/backbone.validation',
    'text': 'libs/requirejs/text',
    'templates': '/templates/site',
    'views': 'views/site',
    'jquery-cookie': 'libs/jquery/plugins/jquery.cookie',
    'jquery-raty': 'libs/jquery/plugins/jquery.raty.min',
    'jquery-slides': 'libs/jquery/plugins/slides.min.jquery'
},
shim: {
    'backbone-paginator': ['backbone'],
    'bootstrap': ['jquery'],
    'datepicker': ['bootstrap'],
    'jquery-cookies': ['jquery'],
    'jquery-raty': ['jquery'],
    'jquery-slides': ['jquery'],
    'backbone-validation': ['backbone']
}
});

require([
'app-site'
], function(App) {
$(function(){
    App.initialize();
});
});
main site.js

{
baseUrl: "javascripts/",
appDir: "..",
dir: "dist",
name: "main-site",

include: ['libs/requirejs/require', jquery-slides'],
insertRequire: ['main-site'],

paths: {
    "main-site": 'main-site',
    'jquery': 'libs/jquery/jquery',
    'jquery-slides': 'libs/jquery/plugins/slides.min.jquery'

}
}
require.config({
baseUrl: "/javascripts/",
paths: {
    'jquery': 'libs/jquery/jquery',
    'underscore': 'libs/underscore/underscore',
    'bootstrap': 'libs/bootstrap/bootstrap.min',
    'datepicker': 'libs/bootstrap/plugins/bootstrap-datepicker',
    'backbone': 'libs/backbone/backbone.max',
    'backbone-paginator': 'libs/backbone/plugins/backbone.paginator',
    'backbone-validation': 'libs/backbone/plugins/backbone.validation',
    'text': 'libs/requirejs/text',
    'templates': '/templates/site',
    'views': 'views/site',
    'jquery-cookie': 'libs/jquery/plugins/jquery.cookie',
    'jquery-raty': 'libs/jquery/plugins/jquery.raty.min',
    'jquery-slides': 'libs/jquery/plugins/slides.min.jquery'
},
shim: {
    'backbone-paginator': ['backbone'],
    'bootstrap': ['jquery'],
    'datepicker': ['bootstrap'],
    'jquery-cookies': ['jquery'],
    'jquery-raty': ['jquery'],
    'jquery-slides': ['jquery'],
    'backbone-validation': ['backbone']
}
});

require([
'app-site'
], function(App) {
$(function(){
    App.initialize();
});
});

我建议您声明要构建的模块,而不是使用include。通过这种方式,requirejs将模块及其所有依赖项打包到优化包中

{
    baseUrl: "javascripts/",
    appDir: "..",
    dir: "dist",
    paths: {
        "main-site": 'main-site',
        'jquery': 'libs/jquery/jquery',
        'jquery-slides': 'libs/jquery/plugins/slides.min.jquery'
    },
    modules : [
        {
            name : 'main-site',
        }
    ]
}
进一步考虑:

  • 如果在任何模块
    define(['jquery-slides'],function(){…}
    中包含jquery幻灯片作为依赖项,则不需要使用include指令,因为该模块的所有依赖项都将包含在优化文件中

    请参阅此链接中模块属性的文档

  • 使用属性
    maincigfile
    避免重复


  • 祝你好运,我希望这对你有所帮助

    你应该在
    build.js
    中加载你的完整配置,重新说明它很长,不必要而且容易出错。接下来,如果模块需要
    jquery幻灯片
    ,你不需要在
    include
    中列出它。只包括引导你的应用程序的模块。从那里开始这些问题将自行解决。