Advertisement
  1. Code
  2. Meteor

Важные приёмы при работе с Meteor

Scroll to top
Read Time: 12 min

Russian (Pусский) translation by Anton L (you can also view the original English article)

Meteor является проектом с открытым исходным кодом, представляет из себя платформу для разработки веб-приложений, веб-приложений написанных полностью на JavaScript.

Meteor предоставляет инструменты для разработки веб-приложений, отлично подходит для стартапов и в основном для любых новых проектов. Логика приложения пишется на одном языке, результат работает на разных платформах (iOS, Android, десктоп) , также имеются hot push обновления поддерживаемые по умолчанию.

Это значит, что вы можете обновить приложение на устройстве пользователя, при этом не нужно ждать одобрения App Store. Ряд пакетов доступен благодаря npm, также у Meteor есть своя библиотека под названием Atmosphere, довольно любопытный инструмент, с которым приятно работать.

Быстрая разработка с Meteor

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

Ну и наконец, с этим веб-фреймворком вы можете реализовать грандиозные идеи, при этом начав довольно скромно, высококачественное реактивное мобильное веб-приложение, вполне под силу создать одному человеку.

NPM + Atmosphere пакеты

Любой пакет из npm доступен в Meteor, так что если вам нравится использовать инструменты на вроде Grunt, Browserify, Webpack, Bootstrap, React, jQuery и Angular, у вас не возникнет проблем при работе с Meteor.

Для поиска новых пакетов:

  • Для npm пакетов, используйте npmjs.com.
  • Для пакетов Meteor, используйте atmospherejs.com.

Для установки npm пакета в Meteor, просто запустите:

1
$ meteor npm install --save browserify

Запуск данной команды обновит ваш package.json добавив зависимости, также будет скачен пакет в локальную директорию node_modules/ вашего приложения.

Контроль версий

Важное замечание: советую вам не добавлять node_modules/ в гит хранилище, в случае если над приложением будет работать другой разработчик, скажите ему, чтобы он запустил meteor npm install, тем самым будут установлены все необходимые пакеты.

Аккаунты пользователей

Meteor accounts-uiMeteor accounts-uiMeteor accounts-ui

Пакет accounts-ui позволяет пользователям залогиниться и зарегистрироваться в приложении, также имеется поддержка oAuth, связанная с Meteor аккаунтами.

Популярный запрос - для соответствия бренду, кастомизация подтверждений (sendVerificationEmail) или приглашений (sendEnrollmentEmail), чтобы их стиль соответствовал остальной теме приложения.

Отличный способ создать HTML письмо в Meteor - использовать пакет pretty emails от yogiben.

1
meteor add yogiben:pretty-email

Теперь вы можете изменить подтверждающие письмо всего парой строк:

1
PrettyEmail.defaults.verifyEmail =
2
  heading: 'Yo - You Need to activate your account on mega mushrooms'
3
  buttonText: 'Activate'
4
  ...

Для добавления информации о вашей компании, вы можете настроить PrettyEmail.options следующим образом:

1
PrettyEmail.options =
2
  from: 'support@mycompany.com'
3
  logoUrl: 'http://mycompany.com/logo.png'
4
  companyName: 'myCompany'
5
  companyUrl: 'http://mycompany.com'
6
  companyAddress: '123 Street, ZipCode, City, Country'
7
  companyTelephone: '+1234567890'
8
  companyEmail: 'support@mycompany.com'
9
  siteName: 'mycompany'

Чтобы послать email, используйте следующие методы:

1
Accounts.sendVerificationEmail Meteor.userId()
2
Accounts.sendResetPasswordEmail Meteor.userId()
3
Accounts.sendEnrollmentEmail Meteor.userId()

Если вы хотите добавить шаблон, вы можете сделать это кастомизировав следующие опции:

1
PrettyEmail.send 'call-to-action',
2
  to: 'myuser@myuser.com'
3
  subject: 'You got new message'
4
  heading: 'Your friend sent you a message'
5
  message: 'Click the button below to read the message'
6
  buttonText: 'Read message'
7
  buttonUrl: 'http://mycompany.com/messages/2314'
8
  messageAfterButton: "I come after the button!"

Изменение стилей также не составит труда:

1
PrettyEmail.style =
2
  fontFamily: 'Helvetica'
3
  textColor: '#606060'
4
  buttonColor: '#FFFFFF'
5
  buttonBgColor: '#007FFF

Вот пример письма - активации, которое получит пользователь в своём емейл клиенте.

Pretty Emails activation emailPretty Emails activation emailPretty Emails activation email

Pretty email обладает огромным количеством различных опций для социальных сетей, обратных ссылок, создания шапки и футера и так далее - прочитать об этом можно на странице с документацией.

Поддержка Ratchet, Materialize и Bootstrap

Имеется пакет для аккаунтов пользователя, каждой из этих популярных фронтенд библиотек, также как и Ionic. Каждый из них может быть полностью настроен, как вы этого захотите.

  • Ratchetmeteor add useraccounts:ratchet
  • Ionicmeteor add useraccounts:ionic
  • Bootstrapmeteor add useraccounts:bootstrap
  • Materializemeteor add useraccounts:materialize

UI

Как и в случае с аккаунтами пользователя, имеется пакет для популярных фронтенд библиотек, таких как Bootstrap, Angular, React и шаблонизатор Blze, и множество других, к примеру Semantic UI.

Поиск на atmosphere даёт много результатов; вот некоторые из моих любимых:

React + Bootstrap

Вам нужно установить пакет npm React, с помощью команды:

1
$ npm install --save react react-dom
2
$ npm install --save react-bootstrap

Теперь, для пакета метеор, запустите meteor add universe:react-bootstrap.

Теперь можно использовать Bootstrap компоненты в вашем React JSX:

1
const buttonsInstance = (
2
  <div>
3
    <ButtonToolbar>
4
      <Button bsStyle="primary" bsSize="large">Large button</Button>
5
      <Button bsSize="large">Large button</Button>
6
    </ButtonToolbar>
7
    <ButtonToolbar>
8
      <Button bsStyle="primary">Default button</Button>
9
      <Button>Default button</Button>
10
    </ButtonToolbar>
11
    <ButtonToolbar>
12
      <Button bsStyle="primary" bsSize="small">Small button</Button>
13
      <Button bsSize="small">Small button</Button>
14
    </ButtonToolbar>
15
    <ButtonToolbar>
16
      <Button bsStyle="primary" bsSize="xsmall">Extra small button</Button>
17
      <Button bsSize="xsmall">Extra small button</Button>
18
    </ButtonToolbar>
19
  </div>
20
);
21
22
ReactDOM.render(buttonsInstance, mountNode);

Переходы между страницами

Если вы используете Iron Router, тогда вы можете воспользоваться пакетом meteor-transitioner. Во время работы с шаблоном Blaze, добавьте следующую конструкцию вокруг {{yield}}:

1
{{#transitioner}}
2
  {{> yield}}
3
{{/transitioner}}

Теперь настройте переход между роутами:

1
Transitioner.transition({
2
    fromRoute: 'fromRouteName',
3
    toRoute: 'toRouteName',
4
    velocityAnimation: {
5
        in: animation,
6
        out: animation
7
    }
8
})

Больше информации о переходах, можно найти здесь README.

Mongo

Для редактирования базы данных mongo в браузере, инструмент Mongol один из лучших, что мне приходилось использовать. Как только вы установите Mongol, командой:

1
$ meteor add msavin:mongol

Нажмите Control-M и у вас будет доступ к вашим коллекциям, с полностью доступным в браузере CRUD.

Я считаю, что использование Mongol невероятно полезно во время отладки приложений, или изменения данных.

Mongol for debuggingMongol for debuggingMongol for debugging

Расширения браузера

Для пользователей Chrome, имеется плагин Mongo под названием MiniMongo, который позволяет просматривать базу данных Meteor во вкладке инструментов разработчика.

Проект MiniMongo доступен на Github, на тот случай если вы хотите собрать инструмент из исходников.

Развёртывание на сервере

Используя замечательный бесплатный инструмент mup, вы можете отправить ваш сайт на Digital Ocean VPN за несколько минут.

Конфигурация очень простая и вам понадобится только ваше приложение, данные SSH, и возможно SSL сертификат, на тот случай если будет использоваться HTTPS.

Чтобы настроить mup, начните с создания директории для развёртывания:

1
$ cd meteor-app
2
$ mkdir .deploy
3
$ cd .deploy

Установите mup:

1
$ npm install -g mup

Инициализируйте директорию:

1
$ mup init

Теперь вам надо настроить процесс развёртывания настроив файл mup.js, который был создан на предыдущей стадии.

1
module.exports = {
2
  servers: {
3
    one: {
4
      host: '1.2.3.4',
5
      username: 'root',
6
      // pem: '/home/user/.ssh/id_rsa',
7
      // password: 'password',
8
      // or leave blank to authenticate using ssh-agent
9
      opts: {
10
        port: 22,
11
      },
12
    }
13
  },
14
15
  meteor: {
16
    name: 'app',
17
    path: '../app',
18
    // lets you add docker volumes (optional)
19
    volumes: {
20
      // passed as '-v /host/path:/container/path' to the docker run command
21
      '/host/path': '/container/path',
22
      '/second/host/path': '/second/container/path'
23
    },
24
    docker: {
25
      // Change the image to 'kadirahq/meteord' if you
26
      // are using Meteor 1.3 or older
27
      image: 'abernix/meteord:base' , // (optional)
28
      imagePort: 80, // (optional, default: 80)
29
30
      // lets you add/overwrite any parameter on
31
      // the docker run command (optional)
32
      args: [
33
        '--link=myCustomMongoDB:myCustomMongoDB', // linking example
34
        '--memory-reservation 200M' // memory reservation example
35
      ],
36
      // (optional) Only used if using your own ssl certificates.
37
      // Default is "meteorhacks/mup-frontend-server"
38
      imageFrontendServer: 'meteorhacks/mup-frontend-server',
39
      // lets you bind the docker container to a
40
      // specific network interface (optional)
41
      bind: '127.0.0.1',
42
      // lets you add network connections to perform after run
43
      // (runs docker network connect <net name> for each network listed here)
44
      networks: [
45
        'net1'
46
      ]
47
    },
48
49
     // list of servers to deploy, from the 'servers' list
50
    servers: {
51
      one: {}, two: {}, three: {}
52
    },
53
54
    buildOptions: {
55
      // skip building mobile apps, but still build the web.cordova architecture
56
      serverOnly: true,
57
      debug: true,
58
      cleanAfterBuild: true, // default
59
      buildLocation: '/my/build/folder', // defaults to /tmp/<uuid>
60
61
      // set serverOnly: false if want to build mobile apps when deploying
62
63
      // Remove this property for mobileSettings to use your settings.json
64
      // (optional)
65
      mobileSettings: {
66
        yourMobileSetting: 'setting value'
67
      },
68
      server: 'http://app.com', // your app url for mobile app access (optional)
69
       // adds --allow-incompatible-updates arg to build command (optional)
70
      allowIncompatibleUpdates: true,
71
    },
72
    env: {
73
      // PORT: 8000, // useful when deploying multiple instances (optional)
74
      ROOT_URL: 'http://app.com', // If you are using ssl, this needs to start with https
75
      MONGO_URL: 'mongodb://localhost/meteor'
76
    },
77
    log: { // (optional)
78
      driver: 'syslog',
79
      opts: {
80
        'syslog-address': 'udp://syslogserverurl.com:1234'
81
      }
82
    },
83
    ssl: {
84
      // Enables let's encrypt (optional)
85
      autogenerate: {
86
        email: 'email.address@domain.com',
87
        domains: 'website.com,www.website.com' // comma separated list of domains
88
      }
89
    },
90
    deployCheckWaitTime: 60, // default 10
91
    // lets you define which port to check after the deploy process, if it
92
    // differs from the meteor port you are serving
93
    // (like meteor behind a proxy/firewall) (optional)
94
    deployCheckPort: 80,
95
96
    // Shows progress bar while uploading bundle to server (optional)
97
    // You might need to disable it on CI servers
98
    enableUploadProgressBar: true // default false.
99
  },
100
101
  mongo: { // (optional)
102
    port: 27017,
103
    version: '3.4.1', // (optional), default is 3.4.1
104
    servers: {
105
      one: {},
106
    },
107
  },
108
};

Теперь настройте сервер:

1
$ mup setup

Развёртывание:

1
$ mup deploy

Вы увидите подтверждения каждого шага во время процесса, в вашем терминале. После того, как развёртывание будет закончено, ваше приложение будет работать на сервере и вы можете проверить это в вашем браузере.

Если хотите узнать больше о конфигурации SSL, пожалуйста прочитайте данный гайд.

Кэширование

Meteor идёт с appcache, который закэширует приложение после первой загрузки, но не для использования оффлайн.

Если вам нужно кэширование оффлайн вам понадобится GroundMeteor. Это хранилище на стороне клиента, которое работает с LocalCollection.

К примеру, мы можем просматривать и хранить коллекцию локально:

1
local = new Ground.Collection('offlineCache');
2
3
local.observeSource(Data.find());
4
5
Meteor.setTimeout(() => {
6
  // Stop observing - keeping all documents as is
7
  local.stopObserver();
8
}, 1000);

Вот пример, контент Data.find() публикации будет закэширован в оффлайн Ground Collection.

Кэши хранилищ ключей

Для кэширования памяти хранилища ключей, вы можете использовать memcache package или redis package, они позволят вам иметь доступ к кэшированным данным на сервере.

Предполагается, что memcache или redis сервер уже запущены, после этого ключ может быть сохранён в memcache.

1
var memcached = new Memcached( [ 'localhost:11211', 'localhost:11212'] );
2
3
  memcached.set( "key", "value", 2, function (err, res) {
4
    console.log("memcached set action response", err, res);
5
  });

Или в Redis коллекцию:

1
var redisCollection = new Meteor.RedisCollection("redis");
2
3
Meteor.publish("movies", function () {
4
  return redisCollection.matching("movies-*");
5
});

Очень хорошая реализация redis, так как она может быть использована для передачи через publish/subscribe архитектуру Meteor.

Инструменты разработчика

Помимо инструментов которые я упоминал ранее, расширение похожее на Firebug доступно в Chrome, оно делает отладку Meteor гораздо легче. Вы можете просматривать данные, которые были переданы от сервера к клиенты используя вкладку DDP и изучить ваш шаблон Blaze с помощью Blaze inspector.

Reviewing a Blaze TemplateReviewing a Blaze TemplateReviewing a Blaze Template

IDE

Для разработки в редакторе Sublime text, кастомная версия Tern.js предоставляет автодополнение для Meteor. Скачать можно на GitHub.

JetBrains предоставляет автоматическую интеграцию с проектами Meteor, с подсветкой синтаксиса и отладкой. Atom также обладает несколькими пакетами для синтаксиса, сниппетов кода и автодополнения.

Шаблона (Boiler Plates)

YeomanYeomanYeoman

Если вы хотите начать с приложения, которое уже настроено, взгляните на yogiben's starter. Главный разработчик Meteor также создал отличный base starter. Если хотите использовать React, можете взглянуть на генератор для Yeoman.

Далее для запуска приложения, Meteor Kitchen предоставит отличный графический интерфейс для конфигурации роутов.

Панели администратора

AdminLTE theme admin panel from YogibenAdminLTE theme admin panel from YogibenAdminLTE theme admin panel from Yogiben

Если вы используете Yogiben's Meteor Starter, вы можете убедится, что панель администратора будет хорошо работать. Всё остальные проекты, которые используют mongo и blaze должны подойти, хотя приложения с React Router могут иметь конфликты с Iron Router.

Тема для панели администратора может быть модифицирована, прочитать об этом можно в документации.

Метеор для метеоритов

Meteor Preview 052Meteor Preview 052Meteor Preview 052

Перед тем как мы закончим, давайте я расскажу вам немного о проекте Meteor. Meteor официально был выпущен в январе 2012, результат проекта Y Combinator incubator, который получил $11.2 миллиона инвестиций от компании Andreessen Horowitz.

Изначально он работал с пакетным менеджером Meteorite (mrt в командной строке), данный элемент был всегда частью ядра Meteor. С релизом Meteor 0.9, произошли изменения к лучшему, было решено использовать пакеты Atmosphere.

Очень просто добавить пакеты в приложение Meteor - meteor add mrt:moment.

В качестве импульса продолжения проекта, он получил публичный интерес и был адаптирован для широкого круга разработчиков старых и новых. Одним из основных мотивов для этого, я предполагаю, был тот факт, что проект обладал гибкостью и способен работать полностью на JavaScript - как на клиенте, так и на сервере.

Сначала, npm пакеты были недоступны, до тех пор пока не вышла версия Meteor 1.3, которая считается важным рубежом в разработке всего проекта.

Работая полностью на JavaScript означает что Meteor может взаимодействовать с огромным количеством существующих JS библиотек, также как и Node библиотеками, теперь, после интеграции с npm. Тем самым Meteor становится передовым фреймворком.

Видно перспективу и прогресс в веб-разработке, подумайте о той мощности которая оказывается в ваших руках во время работы с Meteor, у вас есть доступ к npm и atmosphere пакетам. Это значительное изменение, совсем не так как было раньше, большой простор разработки, по сравнению с эрой до jQuery, до npm, до Bower, во времена Flash, NotePad/Dreamweaver и PHP3. Я работал в командах из десяти разработчиков, делая работу которая, звучит невероятно, может быть выполнена за неделю одним или двумя разработчиками с Meteor.

С этими инструментами в вашем распоряжении, ещё не было лучшего времени для технически мыслящих веб-предпринимателей. Создание приложений вашей мечты своими силами, оставит невероятные впечатления.

К примеру, сегодня я создал CMS с базой данной, с системой пользователей и панелью администратора, с Facebook и Google+ oAuth. Я развернул это на новом сервере, чтобы поделиться с другими людьми для отладки, и видел как данные менялись в реальном времени.

Работа с Meteor невероятно быстрая. Начиная от валидации и правильного введения данных, вся моя работа будет закончена завтра, после восьми часов разработки.

Заключение

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

Надеюсь пакеты и советы, которые я вам дал, позволят сделать приложение без лишней траты времени. Для меня, реализация идей моих приложений за короткое время позволяет сделать процесс креативней и открывает дорогу инновациям.

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

Чтобы получить поддержку касательно проблем связанных с определённым проектом, вы можете поискать решение на GitHub или создать issue в репозитории для разработчиков, которые помогут вам.

Если вам нужно больше советов о Meteor, можете задать их на официальном форуме.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.