Если вы ищете стартовый комплект, основанный на сценариях NPM, поддерживающий ASP.NET Core 2.1, React, Typescript, Webpack с горячей заменой модуля и другие функции, эта статья для вас.
Сегодня наиболее очевидным выбором для начальной загрузки нового приложения React является использование шаблона Facebook create-react-app (CRA) (или create-react-app-typescript с поддержкой Typescript). Однако, если вы хотите использовать ASP.NET Core, вы можете использовать шаблон Microsoft на основе create-response-app.
Для меня create-response-app действительно замечательно, пока вам не понадобится больше контроля над вашими зависимостями и конфигурацией, и вы не вызовете npm run eject, что является односторонней операцией. Тогда вы сами по себе, потому что пути назад нет. В конце концов, для меня create-react-app имеет слишком много функций, которые мне не нужны.
Шаблон Microsoft React позволяет использовать React с ASP.NET Core, но поскольку он основан на исходном приложении Facebook create-response-app, вам нужно дважды его пересмотреть, прежде чем пытаться действовать самостоятельно и запускать командуnpm run eject . Более того, мне не нравится, как шаблон вызывает в Node.js различные сценарии npm, такие как npm install или npm run build. Они определены в свойствах проекта ASP.NET Core, содержащихся в файле *.csproj. Это удобно, когда вы запускаете dotnet команды CLI для компиляции, запуска и отладки приложения ASP.NET Core, но становится действительно болезненным, когда вам нужно определять и запускать разные сценарии npm.
Мои требования к стартовому набору React очень просты. Я хочу:
- контролировать мои зависимости, конфигурацию, и это должно быть очень просто.
- запустите его на веб-сервере ASP.NET Core 2.1, но все должно управляться с помощью сценариев npm, а не
dotnetCLI. - использовать Typescript, Webpack, HMR… и многое другое
Вот почему я создал новый шаблон, который соответствует моим потребностям. Начальный комплект ASP.NET Core 2
Начальный комплект ASP.NET Core 2
ASP.NET Core Starter Kit 2 представляет собой смесь исходного ASP.NET Core Starter Kit (который, похоже, больше не активен, поэтому в названии присутствует цифра 2) и Microsoft ASP.NET Core React / Redux. шаблон". Подробное описание можно найти в репозитории проекта «https://github.com/Luteceo/aspnet-starter-kit-2.0.
Основные особенности:
- Разработка веб-компонентов с помощью React 16.4
- Управление состоянием приложения с помощью Redux 4.0
- Связка с Webpack 4.16
- Статическая проверка типов с помощью Typescript 2.9.2
- Горячая замена модуля (HMR) с помощью React Hot Loader
- Легкая автоматизация сборки с помощью простого JavaScript
- Интеграция с ASP.NET Core 2.1
Легкая автоматизация сборки
Думаю, интересно сказать несколько слов об автоматизации сборки. Весь код содержится в run.js файле, адаптированном из исходного ASP.NET Core Starter Kit. Вот пример задачи start, которая связывает клиентское приложение с помощью Webpack и запускает веб-сервер ASP.NET Core:
tasks.set('start', () => {
global.HMR = !process.argv.includes('--no-hmr');
return Promise.resolve()
.then(() => run('clean'))
.then(() => run('appsettings'))
.then(() => run('build'))
.then(() => run('bundleVendor'))
.then(() => new Promise(resolve => {
let count = 0;
const webpackConfig = require('./webpack.config');
const compiler = webpack(webpackConfig);
// Node.js middleware that compiles application in watch mode with HMR support
// https://webpack.github.io/docs/webpack-dev-middleware.html
const webpackDevMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: webpackConfig[0].output.publicPath,
stats: webpackConfig[0].stats
});
compiler.hooks.done.tap('done', () => {
// Launch ASP.NET Core server after the initial bundling is complete
if (++count === 1) {
const options = {
cwd: path.resolve(__dirname, './server/'),
stdio: ['ignore', 'pipe', 'inherit'],
env: Object.assign({}, process.env, {
ASPNETCORE_ENVIRONMENT: 'Development',
NODE_PATH: '../node_modules/'
}),
};
cp.spawn('dotnet', ['watch', 'run'], options).stdout.on('data', data => {
process.stdout.write(data);
});
}
});
}));
});
Это позволяет связать и скомпилировать приложение в режиме просмотра с поддержкой HMR, а затем запустить сервер ASP.NET Core со следующей строкой:
cp.spawn('dotnet', ['watch', 'run'], options).stdout.on('data', data => {
process.stdout.write(data);
});
В файле run.js определены другие задачи для запуска тестирования, сборки и публикации приложения. Конечно, легко добавить больше задач, которые соответствуют вашим конкретным требованиям к среде.
Запуск приложения
После клонирования шаблона с https://github.com/Luteceo/aspnet-starter-kit-2.0 вы запускаете приложение с yarn install и yarn start. Приложение должно стать доступным по адресу http: // localhost: 5000 / (подробнее здесь). HMR по умолчанию включен:

Заключение
Адаптация двух существующих стартовых наборов React позволила мне получить лучшее из двух миров и создать шаблон, который действительно соответствует моим потребностям. Без особых настроек и церемоний я добился того, чего действительно хотел; Интеграция ASP.NET Core 2.1 с React / Redux, Typescript и HMR. Надеюсь, вы найдете это полезным, оставьте свои комментарии или предложения ниже. Я также буду признателен за любые PR и проблемы. Здесь вы найдете код: https://github.com/Luteceo/aspnet-starter-kit-2.0#getting-started. Совершите экскурсию, посмотрите код и наслаждайтесь!