Ранее в этом месяце я написал пакет Atom, который позволяет пользователям выполнять поиск в своих текстовых редакторах, соответствующий вопросу Stack Overflow, и отображать ответы в модальном виде в Atom. К сожалению, Atom — не самая простая вещь в мире для разработки, потому что документация невелика, а хороших примеров пакетов очень мало. Большую часть времени я потратил на то, чтобы понять, как работает Atom, а не на написание кода или размышления о своей реализации. Я полагался на исходный код пакетов, которые я установил, в качестве руководства, которые работали достаточно хорошо, но им не хватало контекста, который идет с файлами README или хорошей документацией. Я собираюсь пройтись по общей структуре пакета Atom в надежде, что это избавит кого-то от таких головных болей, как у меня.
Структура пакета
Вы можете автоматически сгенерировать шаблонную структуру пакета, открыв палитру команд (cmd-shift-p на Mac или ctrl-shift-p на Linux/Windows) и выбрав параметр с надписью Генератор пакетов: Создать пакет. Это создаст пакет с древовидным представлением, как показано ниже:
your-package |-- keymaps |-- your-package.json |-- lib |-- your-package-view.js |-- your-package.js |-- menus |-- your-package.json |-- spec |-- your-package-spec.js |-- your-package-view-spec.js |-- styles |-- your-package.less |-- .gitignore |-- CHANGELOG.md |-- LICENSE.md |-- package.json |-- README.md
Некоторые из этих файлов вы узнаете сразу, в то время как другие вы можете не узнать, но, вероятно, хорошо понимаете, что они делают.
Каталог раскладок — это место, где вы можете установить любые сочетания клавиш, которые вы хотите использовать для запуска функций в вашем пакете. Настройки по умолчанию должны быть достаточно хорошими, если вы только начинаете работать с Atom, хотя вы можете изменить конкретное сопоставление клавиш на что-то более удобное.
Каталог меню позволяет вам редактировать, как ваш пакет представлен в различных меню. Вы можете изменить метки меню и команды, которые они запускают для контекстного меню (т. е. контекстного меню), меню «Пакеты» и подменю «Пакеты» (Пакеты → ваш-пакет).
Spec — это место, где вы можете писать тесты, если хотите запустить их как на your-package.js, так и на your-package-view.js.
Стили — это место, где вы можете добавить стили к элементам, которые вы могли добавить в your-package-view.js. На самом деле Atom построен на HTML, CSS и JavaScript, поэтому вы можете стилизовать элементы так же, как и веб-страницу. Совет для профессионалов: вы можете открыть консоль, выбрав «Просмотр» → «Разработчик» → «Переключить инструменты разработчика». Это означает, что вы можете использовать console.log() точно так же, как и в браузере. Это делает разработку so намного проще, и это было одним из самых приятных моментов в работе с Atom.
И последнее, но не менее важное: большую часть кода вы будете выполнять в каталоге lib. your-package-view.js — это место, где вы можете управлять пользовательским интерфейсом вашего пакета. Чаще всего это модальное окно, которое также используется генератором пакетов по умолчанию. your-package.js — это место, где будет выполняться основная часть вашей логики, и именно на него ссылаются как на точку входа в вашем package.json. В частности, вам необходимо ознакомиться с четырьмя функциями, о которых я расскажу далее.
Ключевые функции в your-package.js
активировать()
активировать () — единственная функция, которая требуется в этом файле. Эта функция вызывается при первом запуске пакета в данном окне. Он создает экземпляр класса View, который мы указали в your-package-view.js, и инициализирует новое модальное окно, используя этот экземпляр, который еще не виден.
this.yourPackageView = new YourPackageView(state.yourPackageViewState); this.modalPanel = atom.workspace.addModalPanel({ item: this.yourPackageView.getElement(), visible: false });
activ() делает и другие вещи, но они не так важны.
деактивировать()
deactivate() вызывается при закрытии Atom. Он более или менее уничтожает все, что связано с текущим экземпляром вашего пакета. Кроме этого, честно говоря, больше нечего…
сериализовать()
serialize() важен для тех, кто хочет написать пакет, сохраняющий состояние между двумя разными сеансами пользователя.
serialize() { return { yourPackageViewState: this.yourPackageView.serialize() }; }
Если вы помните из метода активации, yourPackageViewState — это то, что передается конструктору YourPackageView, когда ваш пакет переключается в первый раз в сеансе пользователя, и именно так Atom «перезагружает» состояние, которое вы сериализовали, когда окно было закрыто.
переключать()
После всего этого мы получаем toggle(). Для большинства людей функция toggle() запускается, когда кто-то переключает ваш пакет из меню или вводит ярлык, указанный в menu/your-package.json. Когда я писал свой пакет Atom, я относился к toggle() как к основному методу. Вы можете переименовать эту функцию во что-то вроде execute() или run(), если ваш метод не переключает модальное окно, но это вопрос семантики и зависит от вас. Если вы меняете его, обязательно измените его во всех местах, на которые он ссылается (keymaps/your-package.json, menus/your-package.json и package.json).
Также стоит отметить, что использование ключевого слова this
при разработке с использованием Atom сильно зависит. Будьте осторожны при вызове функций с неправильным this
контекстом, если у вас есть какие-либо асинхронные функции. Я бы привязывал или использовал стрелочные функции, чтобы вам не приходилось об этом беспокоиться.
Это завершение этого поста, но не стесняйтесь обращаться по адресу [email protected], если у вас есть какие-либо вопросы о разработке с помощью Atom! Если вы хотите узнать обо мне больше, вы можете посетить мой веб-сайт www.benhubsch.me.