node package manager

jsb

JSB

Простой сборщик JavaScript-файлов.

Описание

JSB предоставляет простой интерфейс для быстрой сборки и минификации JavaScript-файлов, включая следующие особенности:

  • Компиляция нескольких исходных файлов в один.
  • Сжатие исходного кода и удаление комментариев для уменьшения объема файла (с использованием UnglifyJS).
  • Инструкции #import и #include, которые позволяют импортировать файл как модуль и включать содержимое файла без изменений.

Установка

npm install jsb

Основной файл

При сборке необходимо указать JSB корневой файл, с которого начинается сборка. По умолчанию это файл main.js в текущей рабочей директории.

Данный файл не является JSB-модулем, но допускает использование инструкций #import и #include для импорта модулей и включения файлов исходного кода.

CLI

Для сборки из командной строки необходимо использовать команду jsb:

jsb

Данная команда без аргументов попытается отыскать в текущей рабочей директории файл main.js, скомпилировать его и минифицировать, создав в текущей директории файл index.js, представляющий скомпилированный файл исходного кода.

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

  • -i, --input: Указывает начальный файл. По умолчанию — main.js.
  • -o, --output: Указывает итоговый файл сборки. По умолчанию — index.js.
  • -m, --min: Указывает на необходимость минификации исходного кода и может иметь значения true или false. По умолчанию — true.
  • -r, --root: Указывает корневую директорию сборки, относительно которой будет выполняться поиск файлов, включаемых инструкциями #include и #import. По умолчанию — текущий рабочий каталог.

Файл build.json

Если в директории сборки находится файл build.json, JSB попытается импортировать его и отыскать в нем пераметры сборки:

{
    "input": "main.js",
    "output": "index.js",
    "min": true,
    "root": "."
}

API

var jsb = require('jsb');

// Производит сборку проекта
jsb.build({
    input: 'main.js',
    output: 'index.js',
    min: true,
    root: __dirname + '/static/js'
});

// Возвращает скомпилированный код сборки
jsb.buildFile(filename, {
    input: 'main.js',
    output: 'index.js',
    min: true,
    root: __dirname + '/static/js'
});

JSB модуль

JSB модуль представляет собой обычный JavaScript-файл с некоторыми особенностями:

  • Модуль имеет собственную область видимости, не засоряя глобальное пространство имен.
  • Внутри JSB-модуля доступны несколько инструкций и локальных переменных:
    • Инструкция #include включает содержимое другого исходного файла в текущий модуль без изменений.
    • Инструкция #import импортирует другой файл как JSB-модуль, в результате чего становится возможным присваивание результата данной инструкции локальной переменной.
    • Переменная module ссылается на объект, представляющий текущий модуль. Для экспорта данных и функций можно присваивать свойства данному объекту.

Инструкция #include

Инструкция #include позволяет включить произвольный файл исходного кода в текущий модуль:

#include('./lib/jquery.js');

При сборке данная инструкция заменяется содержимым указанного файла.

Инструкция #import

Инструкция #import импортирует указанный файл исходного кода как JSB-модуль, который также может включать инструкции #include и #import:

var model = #import('./models/model.js');

При сборке содержимое указанного файла упаковывается в анонимную самовызывающуюся функцию и помещается на место инструкции #import. При выполнении кода в данную функцию передается один аргумент — переменная module, которая ссылается на пустой объект.

Переменная module

По умолчанию внутри JSB-модуля доступна одна локальная переменная module, которая ссылается на пустой объект текущего модуля. Для экспорта значения или метода необходимо присвоить соответствующее свойство объекту module.

Файл person.js:

module.name = 'Tom Riddle';
module.age = '17';

Файл main.js:

var person = #import('./person.js');

console.log(person.name); // Tom Riddle
console.log(person.age); // 17

Пути к файлам

Если путь к файлу начинается с //, он рассматривается как относительный путь от корневой директории сборки. То есть, в инструкции #include('//jquery.js') будет включен файл /build_directory/jquery.js.

Если путь к файлу начинается с /, он рассматривается как абсолютный путь от корня файловой системы.

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