Звездное приложение для управления рабочим столом на основе Vue и Go

Go внешний интерфейс Vue.js Electron

Предисловие:

Репо моей звезды уже больше 100. В один прекрасный день я пролистал список и вспомнил, что было много вещей, о которых я не знал, почему я снялся в первую очередь... (Это должно быть фолловер 2333), но, лично я считаю, что вообще чужие проекты на гитхабе не что иное, как следующее:

  • Этот проект используется в текущих или будущих проектах, пометьте его звездочкой на случай, если вы забудете найти его в будущем (например, набор пакетов npm, которые часто используются во внешнем интерфейсе).
  • Необходимо изучить и прочитать исходный код реализации этого проекта (например, Vue, React и т. д.)
  • Коммунальные проекты (например, SS, фонарь, некоторые проекты вождения и т. д.)
  • книги и документы с открытым исходным кодом
  • Другие причины, такие как поощрение автора, или просто следование тренду большой звезды, или просто поклонники людей, которые знают друг друга...

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

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

Бывает, что про десктопные приложения я мало писал, так что это практическое занятие.Адрес проектаGitHub.com/zero KIS EK i/…

Выбор технологии:

Десктопная сеть вообще может поддерживаться электроном, а фронтенд будет писать немного vue, значит есть соответствующая поддержкаelectron-vue, но в целом мы знаем, что взаимодействие с системным API осуществляется API, предоставляемым электронами или node.js, а затем через ipc и тому подобное для передачи сообщений, и, поскольку я недавно запустил golang, интересно, смогу ли я используйте интерфейсный код для записи производительности пользователя и используйте golang в качестве поддержки взаимодействия с системным API, а затем найдитеgo-astilectronэтот проект:

Thanks to go-astilectron build cross platform GUI apps with GO and HTML/JS/CSS. It is the official GO bindings of astilectron and is powered by Electron.

Go и Javascript могут передавать сообщения через такие интерфейсы, как sendMessage и OnMessage, Далее идет выбор внешнего интерфейса, как показано ниже, где впервые используются посылки, vuetify и pouchdb:

Серия корзин семейства Vue: Vue2 + Vue-router + Vuex + Vue-i18n
Сборка пакета внешнего модуля: посылка
Фреймворк пользовательского интерфейса: Vuetify (прогрессивный фреймворк Material Design)
Интерфейсная база данных: Pouchdb
Сетевой запрос: axios
Подсветка кода и рендеринг уценки: github-markdown-css

Сборка проекта:

Сначала вам нужно установить Golang и настроить его.GOROOT和GOPATH и другие переменные, если они не настроены, вы можете обратиться кbuild-web-application-with-golangУчебная конфигурация

Если вышеуказанная часть была настроена, то следующим шагом будет установкаgo-astilectronСвязанные зависимости:

$ go get -u github.com/asticode/go-astilectron
$ go get -u github.com/asticode/go-astilectron-bundler/...
$ go get github.com/ZEROKISEKI/go-astilectron-bootstrap

В Celestial Dynasty 80% описанного выше процесса получения будут сталкиваться с этой ошибкой.

unrecognized import path "golang.org/x/ ..."

Что касается этой ошибки, если вы не можете преодолеть стену, вы можете использовать библиотеку зеркал github от golang для ее решения:

$ mkdir -p $GOPATH/src/golang.org/x
$ cd $GOPATH/src/golang.org/x
$ git clone https://github.com/golang/crypto.git
$ git clone https://github.com/golang/net.git
$ git clone https://github.com/golang/sys.git

После git clone вы можете перезапуститьgo get, все должно быть в порядке. В настоящее время исполняемый файл для рабочего стола может быть сгенерирован с помощью команды bundler, но сначала мы должны собрать интерфейсную часть. Если у вас не установлен пакет, сначала установите пакет глобально:

yarn global add parcel-bundler

or 

npm install parcel-bundler -g

Строить:

$ cd src
$ yarn or npm install
$ npm run build

Затем вы можете упаковать:

$ cd ..
$ astilectron-bundler -v

Вышеупомянутый шаг пойдет на загрузку астлектрона и электрона.В случае с Celestial Dynasty в 80% случаев снова будут проблемы, то есть загрузка не быстрая или слишком медленная, в результате чего произойдет сбой.Для этого может быть так:

Сначала создайте папку в текущем проекте, напримерcache_astilectron_bundler, затем вbundler.jsonДобавьте строку кода в:

"cache_path": "cache_astilectron_bundler"

тогда ты можешьGitHub.com/электрон/плохой…Найдите тот, который соответствует вашей системеelectron 1.8.1версия, помещенная вcache_astilectron_bundlerи выполните следующие переименования:

electron-windows-amd64-1.8.1.zip(windows系统)
electron-darwin-amd64-1.8.1.zip(OSX系统)
electron-linux-amd64-1.8.1.zip(linux系统)

существуетGitHub.com/AST ICOs/Аспен…Загрузите версию astileron 0.20.0, также размещенную вcache_astilectron_bundler, переименован:

astilectron-0.20.0.zip

Конечно, если вы хотите связать три версии системы на одном компьютере одновременно, вам нужно загрузить три соответствующие версии электрона 1.8.1 и выполнить вышеуказанное переименование, все помещенные вcache_astilectron_bundler, затем добавьте следующий код в bundler.json:

"environments": [
    {"arch": "amd64", "os": "darwin"},
    {"arch": "amd64", "os": "linux"},
    {"arch": "amd64", "os": "windows"}
],

Затем упаковщик должен иметь возможность сгенерировать соответствующий двоичный исполняемый файл.Адрес генерации по умолчанию находится в выходной папке текущего проекта.

Демонстрация проекта:

Вы можете выбрать английский или китайский язык для входа:

login_English

login_Chinese

После входа в систему с помощью OAuth вы можете увидеть категории (по языку) репозиториев, которые вы отметили звездочкой:

see_starred_repo

Отрисовываются как файл кода, так и файл уценки, и пишется директива для предотвращения загрузки URL-адресов, таких как **./xxx, ../xxx, #xxx**:

see_file_content

Изучив часть исходного кода octotree, я также написал компонент, который может просматривать дерево кода проекта:

see_repo_tree

Пользовательская категория:

customized_classification_1

customized_classification_2

customized_classification_3

customized_classification_4

Вы можете просмотреть ранее загруженные файлы в автономном режиме:

offline

постскриптум:

В первый раз, когда я использовал посылку, так называемая сборка с нулевой конфигурацией действительно не была охвачена, но проблемы в процессе использования все же были, в основном потому, чтоvuetify.css/vuetify.min.cssНекоторые стили используют, например, **display: -webkit-box; -webkit-box-orient: vertical;**, и этот метод был отменен как в autoprefixer, так и в cssnano, который сжимает css, и будет напрямую. Такой код удаляется, а сборка посылки использует cssnano по умолчанию, единственный способ не использовать его - это--no-minify, но в этом случае все файлы не сжаты, а упакованный файл js имеет размер в несколько m (но путь к файлу все еще используется, поэтому он не имеет никакого эффекта)

go-astilectron загружает файл пути к файлу для github oauth, в основном создавая новое окно с адресом авторизации github oauth, а затем отслеживаяwebcontents.will.navigateиwebcontents.get.redirect.requestДля этих двух событий код, возвращенный oauth, используется для запроса токена, а затем сообщение передается в главное окно. Главное окно отправляет сообщение внешнему токену, и процесс oauth завершается. go-astilectron не имеет поддержки этих двух событий, поэтому я поднял PR, чтобы добавить поддержку этих двух событий, и, кстати, я также написалdemo, но в настоящее времяgo-astilectronНедоделок еще много, поэтому не знаю, какие ямки потом появятся (если будут ямки, наверстывать)

Обнаружение автономного состояния (в основном, чтобы избежать ситуации, когда запрос все еще находится в автономном состоянии). navigator.online, который изначально предназначался для использования, но когда эта вещь возвращает false, проблем нет. когда это правда, это может не иметь доступа к Интернету (например, вы включили VMware Network), поэтому я использовал go, чтобы написать набор для соединения tcp с api.github.com для определения автономного статуса.Под Mac проблем нет, но это появится под окнами.cannot read Webcontents of undefinedпроблема, которую необходимо исправить

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