После недавней разработки кроссплатформенного настольного приложения Electron под названием DockJS я хотел бы поделиться что получилось хорошо, а что не очень, и как я попутно решал определенные технические проблемы. Размышляя над этим проектом, я надеюсь пролить свет на то, что стоит помнить о любом проекте Electron.

Райан Уэстлейк и я учимся в Turing: School of Software & Design. Мы последовательно изучаем основы JavaScript в течение этой 7-месячной программы и вот-вот закончим. У нас с Райаном есть мотивация каждый день изучать все больше и больше Javascript, совершенствовать свое мастерство и оттачивать свои инновационные способности, продвигаясь за счет более глубокого понимания основных основ нашего JavaScript.

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

ScratchJS всегда был отличным вариантом с момента его выпуска в качестве расширения для Chrome, и я был в восторге, увидев гораздо лучшую альтернативу. Тем не менее, мы хотели получить доступ к REPL в автономном режиме с нашего рабочего стола и добавить несколько функций, которые выводят практику, написание и изучение JavaScript на новый уровень.

С помощью DockJS мы разработали интерпретацию традиционного настольного приложения с использованием Electron, в частности интерфейс JavaScript REPL, который полностью работает в автономном режиме и может быть доступен в доке на нескольких платформах.

Решение о создании этого приложения представляло собой определенный риск, поскольку наш срок составлял одну неделю, и мы действительно не знали, на что мы готовы пойти, особенно не имея опыта работы с Electron. К нашему удивлению, вычисление кода в поле ввода оказалось довольно простым, даже с промежуточным этапом использования babel в качестве транспилятора:

$runButton.on('click', () => {
  const code = transpileToES5()
  eval(code)
})

const transpileToES6 = (editorCode) => {
const transpileToES5 = () => {
  const editorCode = editor.getValue()
  const result = babel.transform(editorCode, {
    presets: ['es2015']
  })
  const code = result.code
  return code
}

Мы даже нашли библиотеку, которая довольно легко трансформирует любой ванильный JavaScript в es6/es7 — своего рода обратный транспилятор, называемый lebab:

const transpileToES6 = (editorCode) => {
  const { code, warnings } = lebab.transform(editorCode, ['let', 'arrow', 'class', 'commonjs', 'default-param'])

  return [code, warnings]
}

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

const brew = console.log.bind(console)
const pour = console.log.bind(console)
const run = console.log.bind(console)

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

CodeMirror — универсальный текстовый редактор, реализованный на JavaScript для браузера, специализированный для написания кода. Если вы используете Node REPL или проверяете веб-страницу и возитесь в консоли — это использование CodeMirror.

Технически использование Electron с этим приложением кажется легким делом — не то, что вы обычно говорите как разработчик. Хотя масштаб этого приложения не был слишком большим, и лампочка загорелась больше, чем ожидалось, я бы сказал, что Electron — одна из самых приятных библиотек, которые я использовал для создания приложения. Документация мягко говоря неплохая.

Если бы мы продолжили работу над этим проектом, мы определенно были бы рады добавить больше языковых режимов, а это довольно длинный список. Это понравится гораздо более широкой аудитории и расширит возможности любого программиста, когда он будет играть в редакторе. Возможно, наше приложение открылось бы с окном вместо строки меню, что позволило бы пользователю использовать CMD + TAB при навигации по приложениям. Использование менюбара было конструктивным выбором, который имел для нас смысл, поскольку вы могли получить к нему доступ в доке меню в верхней части экрана, что позволяло открывать одно раскрывающееся окно, а не множество потенциально открытых.

const menubar = require('menubar')

const mb = menubar({
  width: 950,
  height: 600,
  index: `file://${__dirname}/index.html`,
  icon: './app/icons/[email protected]'
})

Приведенный выше код демонстрирует простоту настройки окна вашего исходного приложения, начального шага создания приложения Electron. Понятно, что объем нашего проекта был меньше, чем у среднего приложения, но я рискну сказать, что любой разработчик, исследующий часто неизведанные, но хорошо нанесенные на карту ландшафты Электрона, был бы в восторге от приятного процесса сборки, окутанного красивой запутанностью, если бы Я могу.

Прежде всего, страсть Кинана заключается в активизации человеческого потенциала в областях технологий, здравоохранения и психологии. Он стремится довести человеческие инновации до предела и активно участвовать в эволюции сознания.

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

Вы можете следить за его последними разработками/проектами в области программного обеспечения на kswhyte.com и узнавать больше о трансформации и развитии сознания на cosmicroots.co.