Учебники

RequireJS — Оптимизатор

В этой главе мы обсудим оптимизацию в RequireJS. Оптимизатор в RequireJS имеет следующие характеристики:

  • Объединяет файлы сценариев вместе с помощью UglifyJS для использования по умолчанию или Closure Compiler для использования Java

  • Объединяет CSS файлы вместе.

Объединяет файлы сценариев вместе с помощью UglifyJS для использования по умолчанию или Closure Compiler для использования Java

Объединяет CSS файлы вместе.

Оптимизатор является компонентом адаптера r.js для Node и Nashorn . Он разработан, чтобы быть частью процесса сборки, а не для процесса разработки.

пример

После загрузки файла r.js в папку вашего проекта структура папки должна выглядеть следующим образом:

projectfolder/
   |-->index.html
   |-->CSS/
      |--->main.css
      |--->other.css
   |-->libs
      |--->require.js
      |--->main.js
         |--->dependent1.js
         |--->dependent2.js
         |--->dependent3.js

Ваш HTML-файл будет выглядеть так, как показано ниже —

<html>
   <head>
      <script data-main = "libs/main" src = "libs/require.js"></script>
   </head>
   
   <body>
      <h1> RequireJS Sample Page </h1>
   </body>
</html>

Ваш файл main.js будет выглядеть так, как показано ниже —

require(["dependent1", "dependent2", "dependent3"], function (dependent1, dependent2, 
   dependent3) {
});

Ваш файл main.css будет выглядеть так, как показано ниже —

@import url("other.css");

.app {
   background: transparent url(../../img/app.png);
}

Базовая настройка оптимизатора

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

Ниже приведен синтаксис командной строки:

node r.js -o baseUrl = . paths.jquery = content/path/jquery 
   name = main out = main-built.js

Ниже приводится синтаксис для построения профиля —

({
   baseUrl: ".",
  
   paths: {
      jquery: "content/path/jquery"
   },
   
   name: "main",
   out: "main-built.js"
})

После этого вы можете передать имя профиля сборки оптимизатору в командной строке, как показано ниже —

node r.js -o build.js

Есть некоторые недостатки в синтаксисе аргумента командной строки. Совместное использование аргументов командной строки или свойств построения профиля может преодолеть эти недостатки.

Оптимизация одного файла JS

Чтобы оптимизировать один JS-файл, вам необходимо создать JS-файл, содержащий содержимое всех его зависимостей. Ваш файл должен выглядеть так, как указано ниже —

({
   baseUrl: "js/shop",
   paths: {
      "jquery": "jquery",
      "backbone": "backbone",
      "underscore": "underscore"
   },
   
   shim: {
      "backbone": {
         "department": ["underscore", "jquery"],
         "dependent": "Backbone"  
      },
      
      "underscore": {
         exports: "_" 
      }
   },
   
   name: "../main",
   out: "../built/js/main.js"
})

Теперь вы можете создать файл main.js, в котором есть все зависимости для приложения. Этот файл используется в HTML-файле для загрузки всех файлов JS одним запросом. Обратите внимание, что созданные файлы не должны находиться там в каталоге исходного кода; файлы должны быть в копии проекта.

Использование ресурсов CDN

Оптимизатор не загружает сценарии с использованием сетевых ресурсов / CDN (Content Delivery Network). В случае, если сценарии необходимо загрузить с использованием CDN, необходимо сопоставить эти файлы с именем модуля и загрузить файлы в локальный путь к файлу. Вы можете использовать специальное слово «empty» в конфигурации пути профиля сборки, как показано в следующем синтаксисе:

({
   baseUrl: "js",
   name: "mainCDN",
   out: "js/mainCDN-built.js",
   
   paths: {
      jquery: "empty:"
   }
   
})

Основной файл будет выглядеть так, как показано ниже —

requirejs.config({
   paths: {
      'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'
   }
});

require(['jquery'], function ($) {
});

Оптимизация одного CSS-файла

CSS-файлы оптимизируются с использованием следующих параметров непосредственно в командной строке, как показано ниже:

node ../../r.js -o cssIn = main.css out = main-built.css

CSS-файлы также могут быть оптимизированы в файле сборки, используя те же свойства, как показано ниже —

...
cssIn:"main.css",
out:"main-built.css"
...

Оба вышеуказанных метода разрешены и создадут файл с именем projectfolder / css / mainbuild.css . В этом файле будет правильно настроено содержимое файла main.css, пути url () и удалены комментарии.

Оптимизация всего проекта

Оптимизатор использует профиль сборки для оптимизации всех файлов css и js . В следующем примере создается файл build.js .

({
   baseUrl: "js/shop",
   appDir: '.',
   paths: {
      "jquery": "jquery",
      "backbone": "backbone",
      "underscore": "underscore"
   },
   
   shim: {
      "backbone": {
         "deps": ["underscore", "jquery"],
         "exports": "Backbone"  
      },
      
      "underscore": {
         exports: "_" 
      }
   },
   
   optimizeCss: "standard.keepLines",
   modules: [
      {
         name: "app"
      }
   ],
   
   dir: "../built"
})

Файл build.js указывает RequireJS скопировать все папки приложения (параметр appDir) в созданную выходную папку (параметр dir) и применить все оптимизации к файлам, расположенным в выходной папке. Выполните следующую команду, чтобы создать профиль в папке приложения: