2015-02-11 3 views
0

Я выделил свои сторонние библиотеки из своего кода приложения и сгруппировал их все вместе в файл vendor.js для requirejs. В моем файле build.js я использую синтаксис modules оптимизируйте мое основное приложение, исключая скрипты поставщика, и оптимизируйте файл vendor.js. Единственная проблема, с которой я сталкиваюсь, - это когда мой скомпилированный модуль main запрашивает vendor, он получает baseUrl из файла конфигурации и поэтому не загружает оптимизированный файл vendor.js. Мой build.js файл выглядит следующим образом:RequireJS baseUrl и несколько оптимизированных файлов

({ 
    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> 

Он заканчивает загрузку js/vendor.js для этого define() вызова. Что мне здесь не хватает? Как я могу сказать оптимизированный файл main для загрузки build/vendor.js, но разрешить неоптимизированную версию по-прежнему загружать js/vendor.js?

ответ

1

Хорошо, я понял это. Это было просто, на самом деле, просто случай слишком большой конфигурации. Когда вы загружаете свой скрипт с помощью data-main, baseUrl устанавливается относительно этого файла. Итак, если я указал js/main, baseUrl будет js. Но, поскольку я явно указал baseUrl в конфигурационном блоке main.js, это становится переопределенным как в разработке, так и в производстве. Удалив baseUrl: "js" от main.js, все работает так, как ожидалось. Строительная сборка загружает все по сравнению с js, и производственная сборка загружает все (vendor.js) относительно build при изменении data-main на build/main. Надеюсь, это когда-нибудь поможет кому-то другому.

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) { 
    ... 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^