Нравится это вам или нет, но JavaScript стал заметным языком помимо браузера. Node.js популяризировал использование JavaScript в серверной части. Мировое сообщество JS пошло дальше, используя Node и npm как форму DevOps и распространения кода. Следующей важной волной, по моему скромному мнению, станет больший упор на использование JavaScript для создания исполняемых файлов.

Что такое исполняемый файл JS?

Исполняемый файл JavaScript - это просто программа, написанная на JavaScript, а затем скомпилированная в исполняемый файл. Другими словами, файл .exe или .bin (или без расширения в macOS).

Некоторое время можно было создавать исполняемые файлы для приложений Node.js, используя проекты сообщества, такие как node-windows / mac / linux, pkg или nexe, поэтому концепция не нова. . Все эти усилия поддерживаются сообществом (пользовательским пространством). Хотя такие усилия не остались незамеченными, они всегда были скорее дополнительным опытом.

Компиляция с помощью Deno 1.6.0

Выпуск Deno 1.6.0 запланирован на 8 декабря 2020 года. Он примечателен включением deno compile, очень востребованной новой функции для создания исполняемых файлов из исходного кода. Хотя это только первый выпуск нескольких стратегий, он знаменует собой важную веху для проекта. Deno - первая среда выполнения JavaScript, поддерживающая создание определяемых пользователем исполняемых файлов. Это значительно снижает количество усилий и сторонних инструментов, необходимых для создания исполняемых файлов.

Влияние исполняемых файлов

В настоящее время для запуска JavaScript вне браузера требуется, чтобы Node.js или Deno были установлены / доступны на сервере / компьютере, где будут выполняться сценарии. Исполняемые файлы являются самодостаточными, поэтому ничего предварительно устанавливать не требуется.

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

Рассмотрим вариант использования Docker и контейнеров. Контейнеризация - надежный подход к разработке, но для нее по-прежнему требуется среда выполнения, такая как Docker, podman и т.д. рабочая станция. Трудно доставить это замечательное новое приложение FinTech вашим пользователям, если им также требуется установить Node или Docker для его использования.

Разработка приложений как исполняемых файлов

Некоторые разработчики используют такие инструменты, как Electron для создания приложений с использованием JavaScript. Мне всегда нравился Electron (на нем построен Fenix ​​Web Server), но он подходит не для всех типов приложений. Например, многие приложения работают как фоновые службы и не нуждаются в выделенном пользовательском интерфейсе. Для этих типов приложений включение в Electron системы рендеринга пользовательского интерфейса значительно увеличивает размер приложения, не добавляя дополнительной ценности.

Для подобных приложений исполняемый файл - более тонкий и управляемый способ доставки программного обеспечения.

Разработка приложений CLI

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

С Deno 1.6.0 разработчики могут создавать свои собственные инструменты, не беспокоясь о зависимостях времени выполнения. Помните, что исполняемые файлы являются самодостаточными, поэтому не имеет значения, изменится ли среда выполнения. Например, обновление до новой версии Node.js (или понижение версии) не приведет к изменению исполняемого файла. Конечным пользователям не нужно делать ничего особенного для установки необходимых компонентов. Они просто скачивают и запускают приложение.

Вызовы

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

  1. Во-первых, пользователи не всегда обновляют свои исполняемые файлы так часто, как хотелось бы разработчикам. Есть способы администрирования автоматических обновлений, но ответственность за создание такого механизма лежит на разработчиках.
  2. Создание исполняемого файла не заменяет безопасность. Не совершайте ошибку, думая, что скомпилированный код невосприимчив к злонамеренному использованию.
  3. Создавать установщиков бывает сложно. В мире, где npm install чувствовал себя нормально, разработчикам потребуется другой способ распространения исполняемых файлов. Такие инструменты, как homebrew и choco, помогают, но при распространении коммерческих приложений возникают те же проблемы с установкой.
  4. Такие среды выполнения, как Node.js и Deno, устраняют многие межплатформенные пробелы, но не все из них. Создание исполняемого файла не решает этих проблем.

Резюме

Объявление deno compile - большой шаг вперед в использовании исполняемых файлов. Несомненно, для ранних последователей будут некоторые проблемы, но будет также много преимуществ.

Случаи личного использования

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

Небольшое предупреждение: интерфейс командной строки и исполняемые файлы определенно не являются новой концепцией. Это одна из старейших форм вычислений. Что нового, так это инструменты, которые использовались для их создания. Большая часть моей работы с исполняемыми файлами JS является результатом мышления «назад к основам», использующего проверенные основы современными практическими способами.

CLI Первая разработка

Я в восторге от функции deno compile, потому что она соответствует моему собственному вкусу в разработке современного программного обеспечения, Стратегии разработки CLI-First.

Мои исследования этой концепции привели к использованию не зависящих от времени выполнения библиотек, таких как автор / оболочка (межрежимная библиотека для создания инструментов CLI). Эта библиотека помогает привнести в веб-приложения интерфейс командной строки, похожий на исполняемый файл, но при этом позволяет быстро создавать инструменты интерфейса командной строки на основе узлов с использованием той же / аналогичной базы кода.

Конечным результатом этого подхода является возможность переносить логику приложения в разные среды выполнения. На основе одной и той же базовой логики можно построить разный опыт даже в разных средах выполнения.

Исторически сложилось так, что проблема всегда заключалась в работе с процессами сборки. Для создания исполняемого файла требуется процесс сборки. Как упоминалось ранее, были способы сделать это, но обычно для этого требовался отдельный процесс сборки DevOps. Функция deno compile переносит это во время выполнения, сокращая накладные расходы на выпуск проекта и стратегию «прежде всего с помощью интерфейса командной строки», которую я полюбил.

Более широкое использование JavaScript

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

Самый заметный опыт, который я припоминаю, - это размышления об оригинальном дизайне NVM для Windows, менеджера версий для Node.js. Вначале были менеджеры версий, которые полагались на Node. Это казалось нелогичным, потому что этот подход требует Node для установки Node.

Я выбрал Go, который не требует среды выполнения и открывает двери для компиляции в другие операционные системы. В то время я хотел, что есть способ использовать JavaScript, но парадокс, требующий от Node для установки Node, был слишком большим препятствием. Самым сложным в этом выборе был отказ от огромного каталога проверенного в боевых условиях кода JavaScript, который я написал. Хотя я рад, что теперь Go стал частью моего личного набора инструментов, мне жаль, что я не научился ему при других обстоятельствах.

Как исполняемые файлы JS изменили мое мышление…

Работая над rt (преемником NVM4W), я начал пересматривать использование JavaScript для создания инструментов JavaScript. Исполняемые файлы предлагают способ устранить парадокс времени выполнения JS и использовать предыдущую работу. Окончательный вердикт для rt еще не вынесен (требуется больше экспериментов), но тот факт, что есть новые варианты с разумными рабочими процессами, делает это время захватывающим для разработчика.

Не забудьте хлопать в ладоши, если хотите увидеть больше подобных статей.