В постоянно развивающихся усилиях по написанию поддерживаемых интерфейсных приложений мы исследуем ряд технологий, позволяющих вам писать лучший код JavaScript (в контексте React). .
Между прочим, сначала вам нужно знать веб-пакет
Интересно то, что многие из моих коллег, которые используют новейшие инструменты разработки, уклоняются от изучения инструмента сборки webpack в пользу использования более простых инструментов сборки, таких как create-react-app (которые, кстати, используют webpack под капотом). Я предполагаю, что они еще не пришли к выводу, что управление процессом сборки является критически важной частью современной интерфейсной разработки.
Однако проблема заключается в том, что webpack (и дополнительные библиотеки к нему) - невероятно мощный и сложный инструмент. Если вы заинтересованы в полном понимании разработанной здесь конфигурации webpack, я написал ряд статей, которые помогут.
Внедрение поддержки React в сборку
Начиная с конфигурации, не связанной с React webpack (вывод статей), мы добавляем одну зависимость разработки и конфигурацию webpack строки для поддержки React.
yarn add --dev babel-preset-react
./src/webpack.config.js
... module.exports = function(env) { return ({ resolve: { extensions: ['.js', '.jsx'], }, devtool: env === 'production' ? 'source-map' : 'cheap-eval-source-map', entry: './src/index.jsx', output: { ... module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel-loader', options: { presets: ['es2015', 'react'], plugins: ['syntax-dynamic-import'], },
Написание приложения Simple React
Сначала нам нужно добавить зависимости в проект.
yarn add react react-dom
Затем мы обновляем папку src, чтобы получить единственный файл:
./src/index.jsx
import 'babel-polyfill'; import React from 'react'; import { render } from 'react-dom'; render( <div>Hello React</div>, document.getElementById('root'), );
На данный момент у нас есть полностью работающее приложение React и процесс сборки.
Конфигурация ESLint
В то время как транспилятор Babel перехватывает множество ошибок JavaScript, популярная конфигурация Airbnb ESLint также требует особенно строгого стиля. Я просто следовал их инструкциям (они зависят от ОС, поэтому я не перечислял их здесь), чтобы установить зависимости разработки, за которыми следовала команда
yarn install
чтобы зафиксировать эти изменения в конфигурации Yarn.
Также нам нужен файл конфигурации ESLint.
./.eslintrc
{ "env": { "browser": true }, "extends": "airbnb" }
Имея это на месте, мы можем вручную запустить команду lint вручную из корневой папки проекта:
yarn run eslint src/**
примечание. Эта команда запуска пряжи эквивалентна:
./node_modules/.bin/eslint src/**
примечание: мы также можем настроить наш редактор, например, Atom, для использования этой конфигурации линтинга, например, мы можем установить плагины Atom linter-eslint и Реагировать.
Проблема, однако, в том, что наш процесс сборки webpack ничего из этого не использует.
ESLint и веб-пакет
Мы можем использовать eslint-loader для включения ESLint в наш процесс сборки webpack, установив зависимость разработки и обновив наш webpack конфигурация со строгой конфигурацией.
yarn add --dev eslint-loader
./webpack.config.js
... module: { rules: [ { enforce: 'pre', test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'eslint-loader', options: { failOnWarning: true, failOnError: true, }, }, { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel-loader', ...
Проведение тестирования шутки
Хотя мне еще предстоит освоить разработку через тестирование (TDD), я считаю это естественным следующим шагом к усилению процесса разработки. Рисунок, мне нужно было минимально активировать инфраструктуру тестирования, когда я действительно хочу ее использовать.
Учитывая, что Jest написан Facebook и специально ориентирован на React, это естественная среда тестирования для этих усилий. Добавить его так же просто, как установить его как зависимость для разработки.
yarn add --dev jest
В то же время, чтобы предотвратить создание ESLint ошибок из тестов, нам необходимо дополнительно установить другую зависимость разработки.
yarn add --dev eslint-plugin-jest
И обновить файл конфигурации ESLint.
./.eslintrc
{ "env": { "browser": true, "jest/globals": true }, "extends": [ "airbnb", "plugin:jest/recommended" ], "plugins": [ "jest" ] }
Дополнительно нам необходимо обновить:
./package.json
.. "scripts": { "build": "./node_modules/.bin/webpack -p --env production", "start": "./node_modules/.bin/webpack-dev-server --open", "start-production": "./node_modules/.bin/webpack-dev-server --env production --open", "test": "jest" }, ...
Теперь, когда все это готово, мы можем написать простой модуль с тестом:
./src/sum.js
function sum(a, b) { return a + b; } module.exports = sum;
./src/__tests__/sum.test.js
const sum = require('../sum'); test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); });
и выполните его, запустив следующее из корня проекта.
yarn test
Проблема, однако, в том, что наша текущая конфигурация Jest не знает о ES2015 или React в этом отношении; практически бесполезен для тестирования кода React.
Дальнейшие действия
Мы продолжаем укреплять наш процесс сборки React с помощью React удобного Jest тестирования в Повышение безопасности сборки React: Часть 2 .