На Github слишком много скаффолдов, и большинство из них могут быть сосредоточены только на веб-разработке переднего плана, такой как популярная экосистема React.create-react-appИ Vue-cli в экосистеме Vue, но, возможно, как и я, разработка с полным стеком, скаффолдинг, который фокусируется только на разработке интерфейса, не может удовлетворить все потребности, нам может потребоваться разработка более сложных проектов JS с полным стеком, так что здесь является введением. Еще одна среда разработки с полным стеком, основанная на NodeJS.koa-web-kit, не обязательно подходит для всех, но как минимум еще один выбор 🤣.
Некоторые особенности
- ✨На основе самых популярных фреймворков и библиотек, включая, помимо прочего, Koa2, React, Bootstrap4 (только CSS), Webpack4, ES6+, Babel7...
- 📦Готовый опыт разработки с полным стеком
- 🔥 热加 加载 能 h 分析 h 分析 依 大 依 依, 分析 分析 分析 分析
- 📉АСИНХРОНИЗАЦИЯ / ЖДИТЕ поддержки
- 💖Модули CSS, прекомпилятор SASS, PostCSS, поддержка автопрефиксера
- 🎉Добавить простой API-прокси, нет необходимости в громоздкой настройке nginx
- 🌈 Может создавать статические веб-приложения, поддержка 🏗SSR (рендеринг на стороне сервера)
- ⚡️ Развертывание в один клик для создания среды
- 👷Долгосрочное обслуживание...🍻
Сервер
Серверная часть фреймворка основана наkoajs, фреймворк NodeJS MVC следующего поколения, разработчик до сих пор известенexpressjsосновные участники разработки. koa поддерживает новейший синтаксис async/await, позволяющий писать более качественный асинхронный код. И, у Koa есть лучший и более семантический механизм промежуточного программного обеспечения, вы можете сосредоточиться на разработке меньшего и более целенаправленного различного промежуточного программного обеспечения, а затем объединить их, чтобы сформировать мощную структуру, вместо прямого встраивания Многие функции добавлены в ядро koa, что делает koa более легкий каркас.
Любое современное веб-приложение будет иметь слой API, который может быть разработан на других языках (например, java, go...), эти API могут быть развернуты на другом доменном имени, плюс нам нужен обратный прокси-сервер снаружи (nginx) настроить для решения проблемы междоменного интерфейса. Вообще говоря, они настраиваются в процессе эксплуатации и обслуживания, что делает настройку вашей среды разработки интерфейса сложной и трудоемкой. так вkoa-web-kit, мы также предварительно привязываем простой API-прокси, чтобы ускорить настройку интерфейсной среды. Вам нужно только настроить требуемый префикс API, чтобы он указывал на соответствующий фактический адрес API. Вот простой пример:
config = {
//...other configs
"API_ENDPOINTS": {
//set a default prefix
"defaultPrefix": "/prefix",
//e.g http://127.0.0.1:3000/prefix/api/login -->proxy to--> http://127.0.0.1:3001/api/login
"/prefix": "http://127.0.0.1:3001",
"/prefix2": "http://127.0.0.1:3002",
}
}
Таким образом, вам не нужно отдельно настраивать обратный прокси-сервер, просто введите простую конфигурацию, и все готово.
Generally in a production environment, it is recommended to configure a reverse proxy to forward your request directly to the backend api, not to send directly to the node, and then go to the back-end, which may make your request through the service node много.实际情况以项目为准。
Затем служба журнала также необходима для серверного приложения,koa-web-kit
Он также предоставляет простую службу журналов, основанную на известной асинхронной библиотеке журналов.winston,Такие как:
const logger = require('./services/logger');
logger.info(msg);
logger.warn(msg);
logger.error(msg);
Вы можете добавлять настраиваемый вывод в разные файлы, базы данных и т. д. для различных нужд. По умолчанию файлы журнала находятся в корневом каталоге проекта../logs
под папку.
Вообще говоря, мы будем оптимизировать и сжимать файлы ресурсов внешнего интерфейса (css, js, html...), чтобы ускорить загрузку страницы, но мало кто будет рассматривать сжатие кода на стороне узла, в некоторых случаях вы не хотите, чтобы другие увидимся. Также важно сжать код на стороне узла. существуетkoa-web-kit
, мы также предоставляем скрипты сборки для сжатия вашего кода nodejs, ура🍻.
Предположим, вам нужен динамический рендеринг шаблона в дополнение к статическому html и контенту, рендерингу через React,koa-web-kit
используется по умолчаниюnunjucksкак механизм рендеринга шаблонов, но если вы привыкли к другим механизмам шаблонов, просто установите понравившуюся библиотеку, механизм версии основан наconsolidate.jsдля обработки, поэтому вы можете использовать любой поддерживаемый шаблон 😀.
Для React SSR (рендеринг на стороне сервера) он находится в стадии разработки, но при необходимости вы можете пойти и использовать некоторую структуру, напримерnext.js.
Должна ли быть интеграция с базой данных для так называемой среды разработки с полным стеком? Да, это необходимо, но для того, чтобы сделатьkoa-web-kit
Более легкий, не ограничен предварительно добавленными базами данных, а для современной веб-разработки все должно быть модульным, чтобы вы могли легкоnpm install
Любая библиотека уровня базы данных, которую вы хотите удовлетворить вашим потребностям в сохранении, также может быть ситуация, когда ваша служба уровня данных может быть разработана другой командой на другом языке, вам просто нужно вызвать API «Да» (например, конфигурация прокси-сервера API выше), поэтому нет предварительной привязки библиотеки сохранения, вы можете установить ее в соответствии с вашими потребностями.
еще одинkoa-web-kit
Крутая функция заключается в том, что вы можете устанавливать переменные среды вашего приложения разными способами. Все мы знаем, что каждому проекту нужна переменная среды для установки разных операционных сред. Например, в среде разработки нам нужно отправлять запросы API на адрес разработки. При развертывании в сети нам нужно настроить адрес API как онлайн-адрес. ; Другая ситуация в том, что в среде разработки мы будем логировать много вывода на консоль, но когда дело доходит до генерации, нам нужно убрать эти логи отладки и т.д... Также существует множество сторонних библиотек, таких как React, который будет основан на разныхNODE_ENV
делать различные оптимизации. Поэтому установка переменных окружения очень важна для нашего проекта, вkoa-web-kit
, вы можете установить переменные среды по-разному:
- существует
config
в папкеapp-config.js/app-config.js.sample
, вы можете скопироватьapp-config.js.sample
прибытьapp-config.js
, а затем задайте разные переменные для вашей локальной среды разработки. - Переменные среды, когда вы запускаете некоторые сценарии, вы можете переопределить свой локальный файл конфигурации через командную строку или сценарий оболочки.
app-config.js
Конфигурация - По умолчанию
config.default/dev(prod).js
файл, используйте его только в том случае, если вы не настроили 2 вышеуказанных метода.
Пожалуйста, обратитесь кkoa-web-kit#ENV_Configuration.
внешний интерфейс
Ну и, наконец, часть фронтенд-разработки,koa-web-kit
Использование новейших библиотек пользовательского интерфейса и инструментов разработки от сообщества, чтобы сделать вашу разработку лучше, в том числе:
- React-v16, самая популярная UI-библиотека на данный момент, с сильной поддержкой сообщества, вы можете найти практически любую функцию, которую хотите (например, Vue.js?, см.vue-web-kit).
- Bootstrap-v4, самый популярный фреймворк CSS/верстки (использует только часть CSS, без jQuery).
- Используя ES6+, через webpack и babel, мы можем использовать новейшие стандарты js для разработки наших приложений, не обращая внимания на совместимость с браузером, компиляция нового синтаксиса будет основываться на вашей конфигурации.browerslistобрабатывать.
- Прекомпилятор SASS/SCSS, включая PostCSS и автопрефиксер, не обращая внимания на префикс свойства css поставщика браузера, по-прежнему основанный наbrowerslistдля обработки; вы можете добавить все, что хотите
CSS-in-JS
схема должна быть вашей схемой темы/стиля.
Развертывание производственной среды
Когда вы закончите разработку внешнего интерфейса и серверной части, пришло время выполнить развертывание в среде сборки для обслуживания ваших пользователей. пройти черезkoa-web-kit
, процесс развертывания будет очень простым.Вы можете завершить процесс установки зависимостей, упаковки ресурсов и запуска служб узла с помощью простого сценария npm.Вы также можете пропустить некоторые из этих шагов с помощью параметров, таких как сценарии npm:
npm run deploy
, не добавляйте никаких опций, завершите процесс,npm run deploy -- 1 0 1
, будут создаваться только файлы ресурсов,
больше опцийkoa-web-kit#Deploy
Бонусный раунд: Создание статических сайтов
несмотря на то чтоkoa-web-kit
Это полноценный фреймворк для разработки.Если вам не нужны серверные функции, вы все равно можете просто сгенерировать статический сайт и закинуть его прямо на статический сервер (Github Pages, Netlify и т. д.).
При создании статического сайта необходимо учитывать следующее:prefix path
, в некоторых известных генераторах статических сайтов, таких какGatsby, на этот счет тоже есть инструкции, например, его нужно развернуть на Github Pages, а корневая директория проекта вообще находится вhttp://user.github.io/project
здесь/preject
вышеprefix path
, все запросы ресурсов должны быть/project
вниз, иначе он может сообщить 404, вkoa-web-kit
Конфигурация выглядит следующим образом:
{
//optional, your cdn domain for your static assets if you have
"STATIC_ENDPOINT": "http://cdn.com",
//optional, additional prefix for your cdn domain
"STATIC_PREFIX": "/public/",
//trailing slash for "APP_PREFIX"
"PREFIX_TRAILING_SLASH": true,
//here is the prefix path for your app1,
//if "PREFIX_TRAILING_SLASH" is true,
//the final "env.prefix" value(details below) will be "/app1/"
"APP_PREFIX": "/app1",
}
Итак, как нам получить это значение в нашем коде (например, в вашем компоненте)? Очень просто, импортируйте в свой компонентenv.js
:
//full path: "./src/modules/env.js"
import env from 'modules/env';
// -> "/app1/public/" , with extra static assets prefix
console.log(env.prefix);
// -> "/app1/"
console.log(env.appPrefix);
// concat your static url if it does not imported by a webpack loader
<img src={`${env.prefix}static/imgs/no-loader.png`}>
Если вы импортируете эти файлы в код, загрузчик Webpack также динамически добавит эти префиксы в соответствии с конфигурацией префиксов.
Если вы хотите, чтобы все ваши статические ресурсы использовали относительные пути без '/', установите следующее:PREFIX_TRAILING_SLASH: false
, STATIC_PREFIX: ""
, APP_PREFIX: ""
.
В заключение
Вышеупомянутоеkoa-web-kitКраткое введение, если хотите, можете попробовать, если есть вопросы, можетеоткрыть вопрос, или PR, чтобы предложить новые функции. Я надеюсь, что это упростит вашу разработку полного стека nodejs.
С 💖 отkoa-web-kit.