Require.js продолжает загружать несжатые модули после оптимизации

Я запустил оптимизатор r.js, и он, кажется, работает правильно. Единственная проблема, с которой я столкнулся, заключается в том, что во время загрузки сжатой оптимизированной версии она продолжает загружать все несжатые модули. Любая причина, почему это произойдет?

build.js

{
appDir: '../static',
mainConfigFile: '../static/javascript/config.js',
dir: '../public',
baseUrl: 'javascript/libs',
useStrict: false,
wrap: false,
optimizeCss: "standard",
optimize: "uglify2",
generateSourceMaps: false,
preserveLicenseComments: false,
uglify2: {
    "screw-ie8": true,
    warnings: false,
    mangle: true
},
throwWhen: {
    optimize: true
},
pragmasOnSave: {},
modules: [

    {
        name: '../front',
        include: ['views/front/main'],
        exclude: ['../config']
    }

    ,

    {
        name: '../portal',
        include:  ['views/portal/main'],
        exclude: ['../config']
    }

    ,

    {
        name: '../survey',
        include:  ['views/survey/main'],
        exclude: ['../config']

    }

]
}

config.js

require.config({
  baseUrl: '/javascript/libs',
  urlArgs: 'v=' + (new Date()).getTime(),
  enforceDefine: false,
  paths: {
    collections: '../collections',
    etc: '../etc',
    models: '../models',
    views: '../views',
    templates: '../../templates',
    backbone: 'backbone',
    underscore: 'lodash',
    'underscore.string': 'underscore.string',
  },
  shim: {
    backbone: {
      deps: ['jquery', 'underscore'],
      exports: 'Backbone'
    },
    underscore: {
      deps: ['jquery', 'underscore.string'],
      exports: '_'
    },
  }
});

Конфиг загружается так:

<script data-main="/javascript/portal-v2.0.0.js" src="/javascript/libs/require.js"></script>

и portal.js выглядит так:

require(['./config'], function() {
  return require(['views/portal/main']);
});

1 ответ

Вы начинаете загружать ваше приложение с этим:

<script data-main="/javascript/portal-v2.0.0.js" src="/javascript/libs/require.js"></script>

Что это делает, это график загрузки вашего portal-v2.0.0.js файл. Однако его фактическая загрузка происходит в какой-то неопределенной точке в будущем. (Кстати, вы не должны ставить .js в конце имени модуля. Значение data-main это имя модуля, поэтому нет .js там. Это может вызвать тонкие проблемы.)

Как видно из загружаемых вами шаблонов загрузки, к моменту выполнения следующего кода вышеуказанный модуль еще не загружен:

require(['./config'], function() {
  return require(['views/portal/main']);
});

Когда RequireJS доберется до require(['views/portal/main']), он находит и загружает отдельный модуль вместо пакета.

Решением здесь было бы добавить следующее к вашей конфигурации времени выполнения:

bundles: {
    '/javascript/portal-v2.0.0': ['views/portal/main'],
}

Это говорит RequireJS, что когда вам требуется модуль с именем views/portal/main, он должен искать его там же, где находится модуль с именем /javascript/portal-v2.0.0 расположен. (И не забудьте удалить .js расширение от вашего data-main.) Вам не нужно перечислять все модули, которые находятся в portal-v2.0.0 там только те, которые вам требуются извне portal-v2.0.0, Обратите внимание, что то же самое будет справедливо для других ваших пакетов, если какой-либо из их модулей требуется вне их, вы должны перечислить эти модули в соответствующих bundles Настройки.

Вы также должны посмотреть на removeCombined удалить отдельные файлы из выходного каталога и сохранить только ваши оптимизированные пакеты.

Другие вопросы по тегам