Работа разработчика требует частогоhost
Переключайся, быстро разрабатывай и тестируй в разных средах.Внутри али есть iHost, который прост в использовании, но к сожалению не открывается.После ухода не нашел лучшего для использования.host
Переключите инструменты и просто напишите один самостоятельно. Проект находится в открытом доступе
кодовый адрес, Тукао приветствую.
используемая технология
Поскольку это настольное приложение, в качестве фронтенд-разработки в настоящее время первым выбором, естественно, является eletron, а фронтэнд-фреймворк выбирает стек технологий реагирования.
проект на основеelectron-react0-boilerplateГенерация, используемые методы включают в себя:
- react 16.x
- redux 4.x
- redux-thunk 2.x
- react-router 4.x
- ant-design 3.x
- reselect 3.x
- redux-actions 3.x
- webpack 4.x
- node-sass 4.x
Основная логика и представление
Сложность всего приложения на самом деле невелика, главное генерировать некоторые предметы, исходя из статуса активации предметовhost
Основные операции для чтения и записи файлов следующие:
особенности дизайна
- три вкладки
- страница настроек хоста: добавление, удаление, изменение и проверка записей хоста
- Текущий действующий хост: просмотр текущего действующего хоста системы.
- Исходный хост: после запуска приложения копия исходного файла хоста будет сохранена для восстановления.
- настройки хоста
- Возможность создания записи хоста и записи соответствующего хоста
- Вы можете добавлять, удалять, изменять и проверять хост
- В то же время можно создать группу хостов для унифицированного управления.
- Установите флажок слева, редактирование настроек активного хоста изменит хост системы в реальном времени, но во время редактирования устанавливается 2-секундная задержка, чтобы избежать частого чтения и записи файлов во время непрерывного процесса ввода.
Вся функция приложения настолько проста, что ключевым моментом является проблема с разрешением, для работы с файлом хоста необходимо изменить/private/etc/host
сумма файлов/private/etc
разрешения каталога. Поэтому при запуске приложения всплывет всплывающее окно для ввода пароля пользователя компьютера для авторизации.
Задокументируйте несколько основных используемых технологий
redux-actions и bindActionCreators
Проекты на основе Redux часто критикуют за громоздкие действия и редукторы, а также слишком много шаблонного кода.redux-actionsЭто хороший инструмент для решения этой проблемы, пожалуйста, изучите конкретное использование самостоятельно. Тем не менее, стоит отметить, что редуксbindActionCreators
Вложенные объекты actionCreators не поддерживаются, например.
const actionsCreators = {
add: function() {
xx
},
change: {
changeTitle: function() {
xx
},
changeDate: function() {
xx
}
}
}
const { add, change } = bindActionCreators(actionsCreator, dispatch)
Измененные здесь actionCreators не будут успешно связаны, потому чтоredux-actions
Сгенерированные actionCreators могут быть вложены друг в друга, поэтому исходныйbindActionCreators
а такжеredux-actions
Неудобно совмещать. Проект был немного переписан.bindActionCreatorsСделайте так, чтобы он поддерживал вложенность.
reselect
Для некоторых данных, основанных на вычислениях, одновременное хранение исходных данных и расчетных данных в хранилище не является хорошим решением, так как каждое обновление необходимо обновлять дважды, что легко пропустить.redux
отличный отmobx
, mobx
существуетcomputed
Декораторы используются для решения проблемы вычисляемых свойств. В настоящее времяreselectОн очень удобен, он не только решает проблему вычислительных данных, но его большая ценность заключается в сокращении повторных вычислений, каждый раз ререндеринг вычисляет большой объем данных без повторения вычисления, когда входные параметры остаются неизменными. Но проблема в том, что их будет больше.selectors
Слой, может быть, это сведет некоторых с ума, шарлатан~~
постоянное хранилище состояния
Чтобы поддерживать предыдущее состояние каждый раз, когда приложение открывается, необходимо сохранить весь уровень магазина, поэтому с помощьюelectron-json-storageНаписал простое промежуточное ПО для редукции:
import storage from 'electron-json-storage';
// 同步 store 到某个文件的持久化存储中间件, 基于electron-json-storage做存储
const storageState = store => dispatch => action => {
dispatch(action);
const nextState = store.getState();
const { menuTree, checkedKeys } = nextState.host.menus;
const { systemHost } = nextState.host.systemHost;
const defaultDataPath = storage.getDefaultDataPath();
const dataPath = storage.getDataPath();
console.log('paths:', defaultDataPath, dataPath);
storage.set('HostState-xu', nextState); // 会创建一个HostState-xu.json的文件,尽可能保证唯一性,不与其他应用冲突
};
export default storageState;
каждый разaction
Изменения синхронизируютсяstate
.
electron-react-boilerplateямы
флоу и эслинт
Flowи немногоeslintПравила доставят много хлопот и лишней работы на ранней стадии, поэтому некоторые правила можно модифицировать по своему усмотрению, но дляFlow
а такжеeslint
Лично рекомендуется использовать его много, что впоследствии уменьшит множество мелких проблем.
Но в проектеeslint-import
Плагин объединяетwebpack
настраиватьalias
Будут проблемы, когда то же самое для тестовых случаев,webpack
изalias
Конфигурация также не вступит в силу.
Несколько ключевых моментов обработки:
- .eslintrc необходимо изменить на .eslintrc.js
- Упоминается в .eslintrc.js
path
нужноrequire
, Не можемimport
- Измените на .eslintrc.js, и он появится в vscode.
Eslint server
Проблема зависания в основном из-за проектаwebpack.config.render.dev.js
Обнаружение переменной среды выполняется само по себеCheckNodeEnv('development')
, закомментируйте эту строку кода.
electron-react-boilerplateПри постоянном обновлении последняя версия конфигурации eslint может не совпадать с моей на тот момент, а некоторый опыт обработки также может быть устаревшим. Перечислите некоторые справочные проблемы:#620 ,#1321 , #1509
Цитирование изображений
Всегда есть проблема с путем к эталонному изображению после упаковки, официальная рекомендация — передавать его в процессе рендера.require
Представь картинки и пройдиloader
генерироватьbase64
фотографии напрямую черезpath.join
а также__dirname
Путь генерации подходит для среды разработки, но после упаковки будет сообщено об ошибке.
Однако есть и проблема с использованием картинок в основном процессе, план апелляции не вступает в силу, и решение пока не найдено, а актуальныеissue
по-видимомуelectron
Будут некоторые проблемы в среде разработки и генерации статического пути к ресурсам .
исполняемый файл оболочки
хотел бы использоватьshelljsВыполните некоторую обработку команд, но обнаружили, что онаelectron
Проблемы совместимостиelectron-compatibility
Поскольку требования не сложны, используйте их напрямую.child_process.exec
для обработки.
Странная проблема с упаковкой
Из-за проблемы с введением образа я часто упаковываю и проверяю, а затем возвращаюсь, чтобы найти проблему.Если есть проблема с последним пакетом, я упакую его снова после модификации и обнаружу, что программа все еще не может быть запущена , В это время его необходимо отключить от сети для успешного запуска. Неизвестно почему.
резюме этапа
Это первый раз, когда нужно написать полный электронный проект для решения реальных потребностей.Это довольно интересно.Последующий проект должен выполнить некоторое тестирование, непрерывную интеграцию и автоматическую обработку обновлений.В настоящее время опыта недостаточно. Друзья сообщества, пожалуйста, больше советуйте, учите, учитесь вместе!