image

  • jspm — это менеджер пакетов для SystemJS, сделаный на основе ES6 module loader
  • Позволяет загружать все форматы модулей (ES6, AMD, CommonJS и Globals) непосредственно из npm или Github с управлением зависимостями. Также позволяет использовать любые не стандартные источники модулей, реализованные через Registry API
  • В разработке: Загружает модули ES6 как отдельные файлы, и компилирует их в прямо в браузере
  • В продакшене: Собирает модули в один или несколько бандлов, с единой командой для запуска всего приложения


Начнем


Устанавливаем jspm cli


  npm install jspm -g


Создаем проект


  cd my-project
  npm install jspm

Рекомендуется также локально установить jspm, дабы зафиксировать его версию для данного проекта. Это позволит сохранить поведение вашего приложения в случае, если глобальный jspm обновится. Для подтверждения локальной версии выполните jspm -v.

Создадим кофигурацию для нового проекта:

  jspm init

  Package.json file does not exist, create it? [yes]: 
  Would you like jspm to prefix the jspm package.json properties under jspm? [yes]: 
  Enter server baseURL (public folder path) [.]: 
  Enter jspm packages folder [./jspm_packages]: 
  Enter config file path [./config.js]: 
  Configuration file config.js doesn't exist, create it? [yes]:
  Enter client baseURL (public folder URL) [/]: 
  Which ES6 transpiler would you like to use, Traceur or Babel? [traceur]:

Это создаст фаил package.json и конфигурационный файл. Также jspm init запускается автоматически, если вы, устанавливаете jspm в пустой проект.
  • baseURL — путь к корневой папке вашего http сервера (public) относительно файла package.json. По умолчанию это та же папка где и сам package.json.
  • jspm packages folder — папка куда jspm будет устанавливать все внешние зависимости.
  • Config file path — конфигурационный фаил для вашего приложения. Должен находится в baseURL и включен в систему контроля версий.
  • Client baseURL — URL папки public для браузера
  • Transpiler — используемый транспайлер. Эта опцию можно менять в любой момент командой jspm dl-loader --babel (по умолчанию traceur). Для более тонкой настроики можно определить babelOptions и traceurOptions

Если вам когда-нибудь понадобится поменять какие либо из этих настроек — можно напрямую редактировать package.json и ваше приложение подхватит новые настройки, когда вы запустите jspm install или jspm init.

Устанавливаем любые пакеты из репозитория jspm, Github или npm


  jspm install npm:lodash-node
  jspm install github:components/jquery
  jspm install jquery
  jspm install myname=npm:underscore


Установку нескольких пакетов можно обьединить в одну строку разделив пробелами.

Любой пакет npm или Github можно установить подобным образом.

Большинство npm пакетов установятся без каких-либо дополнительных настроек. Это происходит потому что репозиторий npm применяет трансформацию, основываясь на системе разрешения зависимостей Node require (от переводчика — имеется ввиду это) — это делает Node и пакеты в стиле npm совместимыми с jspm.

Пакеты Github возможно, нуждаются в некой конфигурации перед использованием в jspm (подробности, англ.)

Имена всех установленных пакетов сохраняются в package.json — таким образом, папка jspm_packages, а также конфигурационный файл могут быть полностью восстановлены одной коммандой jspm install. Это идеальное решение для тех, кто использует системы контроля версий и не хочет помещать сторонние пакеты в свой репозиторий.

В фаил config.js помещается информация о версиях зависимостей и номера версий фиксируются. Таким образом, файл config.js становится фиксатором версий и он должен быть добавлен в систему контроля версий (от переводчика — некий аналог rails Gemfile.lock).

Пишем код приложения


Теперь можно начать создавать отдельные модули (включая модули формата ES6), например в папку lib:

lib/bootstrap.js

  import _ from 'lodash-node/modern/lang/isEqual';
  import $ from 'jquery';
  import underscore from 'myname';

  export function bootstrap() {
     // bootstrap code here
  }

lib/main.js

  import {bootstrap} from './bootstrap';
  bootstrap();

Запускаем наше приложение


HTML страницы должен включать скачанный автоматически при jspm init — загрузчик SystemJS, а также конфигурационный фаил, после чего импортируем основной модуль нашего приложения:

  <!doctype html>
  <script src="jspm_packages/system.js"></script>
  <script src="config.js"></script>
  <script>
    System.import('lib/main');
  </script>

Запускаем локальный сервер и смотрим на нашу страницу.

Сборка для продакшена


Запускаем следующую команду в консоли и обновляем страницу в браузере:

  jspm bundle lib/main --inject

Все наше приложение было скомпановано в один bundle.js. Как вариант, можно использовать

jspm bundle-sfx lib/main

Это создаст единый файл всего приложения, который можно использовать в script таге без использования config.js и system.js.

Еще по теме


Видео скринкасты и выступления



Комментарии (10)


  1. artyfarty
    20.04.2015 11:38
    +1

    ждал что будет ставится через bower


    1. dark_ruby Автор
      20.04.2015 11:53
      -1

      bower пакеты можно ставить через кастомный ендпоинт
      поидее через RegistriAPI можно прикрутить что угодно, даже NuGet


  1. htdt
    20.04.2015 13:26

    github.com/htdt/ng-es6-router пример запуска angular + new router + es6 через jspm (моё авторство)


  1. zxcabs
    20.04.2015 14:26
    +1

    Пробовал SystemJS пару месяцев назад, штука интересная но в сравнении с webpack`ом проигрывает. на данный момент webpack обладает куда большими возможностями и удобством. Использовать просто jspm как менеджер пакетов вообще не вижу смысла, тот же npm умеет ставить из github`a, так что jspm тут ни какими преимуществами не обладает.


    1. KingOfNothing
      20.04.2015 22:48

      jspm не только устанавливает файлы, но и загружает, и собирает зависимости. В этом преимущество, на мой взгляд. + не только с гитхаба, а отовсюду. Плюс не только js, а всё что угодно. Опять же не только устанавливает в локальную папку, но и позволяет использовать в приложении с помощью загрузчика.


    1. KingOfNothing
      20.04.2015 23:36

      Webpack действительно выглядит очень интересно. Спасибо. А что именно лучше в webpack по сравнению с jspm?


      1. zxcabs
        21.04.2015 19:34

        Ну на вскидку, удобный конфиг файл, куча всевозможных загрузчиков и инструментов. Из минусов webpack'a сейчас можно назвать то что он не понимает System.import но это автор обещал добавить.

        Главной киллерфичей является webpack-hot-update с которой уже подружили реакт, и работает это реально круто. Если еще не знаете что это, то советую для начала посмотреть видео vimeo.com/100010922


        1. KingOfNothing
          21.04.2015 19:42

          Ясно, интересно. Правда, я react не использую, но думаю, что не только с ним такое возможно. Вот тут энтузиасты делают такое на основе jspm github.com/geelen/jspm-server/issues/1#issuecomment-91213818


          1. zxcabs
            21.04.2015 19:45

            webpack-hot-update имеет свое апи, и вы можете подружить с ним все что угодно.


  1. KingOfNothing
    20.04.2015 22:50

    github.com/OrKoN/jspm-ember-playground пример приложения emberjs c es6 и загрузка/компиляция шаблонов через jspm. А также экспериментальные декораторы с помощью babel