Страницы

среда, 20 ноября 2013 г.

TypeScript. Running ImageBoard sample.

Недавно я начал интересоваться языком TypeScript. В свое время обращал внимание на Dart и CoffeeScript - почитал и забыл. Такая же история произошла бы и в этот раз, если бы не Douglas Crockford, вернее его пост в Google+. Определенно буду применять язык TypeScript в процессе разработки. Сегодня расскажу о том, как запустить ImageBoard - приложение, реализованное с помощью TypeScript, для чего нам также потребуются Node.js и MongoDB.

Последуем инструкции из файла README.txt приложения.

1. Предположим Node.js и MongoDB у нас уже установлены. Качаем архив.
Нас интересует каталог samples. Извлечем из архива каталог samples\imageboard.

2. Запускаем процесс mongod (об установке и настройке MongoDB рассказывал в одном из предыдущих постов).

3. Открываем консоль в каталоге с бинарниками MongoDB, восстанавливаем данные из дампа:
- mongorestore dump
, где dump - путь к одноименному каталогу в только что распакованном каталоге imageboard:

Данные извлекаются в базу данных по имени mydb и состоят из двух коллекций: images и users.

4. Переходим в каталог приложения - imageboard.

Прежде чем выполнить установку необходимых модулей предлагаю взглянуть на содержание файла package.json:
{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.5.8"
 , "ejs": ">= 0.5.0"
    , "jade": ">= 0.0.1"
 , "mongodb": ">= 1.0.0"
  }
}

Приложение на фреймворке Express, движок шаблонов - Jade, драйвер MongoDB - "нативный", для чего нужна ссылка на движок шаблонов EJS для меня загадка.

ОК, установим модули:
- npm install

5. Прежде чем компилировать приложение не мешало бы установить компилятор:
- npm install -g typescript

Пытаемся компилировать:
- tsc app.ts

... и получаем массу возражений компилятора.
Если посмотреть повнимательнее на самое первое возражение, можно догадаться, что косяк в какой-то ссылке в файле app.ts.
Открываем файл app.ts и наблюдаем на первой строке ссылку на так называемый файл определения (объяснение этого понятия выходит за рамки текущего повествования, читайте мануал :)):
///<reference path='..\node\node.d.ts' />

Похоже нам понадобится распаковать каталог samples\node, содержащий эти самые файлы определений для Node.js.

Пытаемся компилировать еще раз:
- tsc app.ts

И снова неудача. Компилятор TypeScript поддерживает два типа модулей: commonjs и amd. Разумеется нас интересует первый.

Пытаемся компилировать в третий раз:
- tsc app.ts --module commonjs

Bingo! Причем одновременно с файлом запуска приложения app.js были скомпилированы все файлы, которые были импортированы по ходу компиляции.

6. Запускаем приложение:
- node app

Много букафф :) - видимо ругается драйвер MongoDB, но не так, чтобы на него обращать внимание :).

7. Открываем в браузере адрес нашего приложения - http://localhost:3000/ ...

... ТА-ДА :).

Пощелкаем по ссылкам:

Попробуем добавить новый ImageBoard ...

... косяк в Jade-шаблоне.
Оставим его исправление в качестве "домашнего задания", так как он не имеет отношения к предмету изложения.

В завершение, надеюсь, что разработчики TypeScript ровно разрулят изменения в спецификации ECMAScript 6, которые безусловно будут.