Наводим порядок

ОБНОВЛЕНИЕ 2018: Вышло второе издание (современный код и версии пакетов, данное издание УСТАРЕЛО)

На канале так же проводятся бесплатные вебинары, публикуются переводы и авторские материалы, присоединяйтесь!

Данная глава является своего рода "перекуром". Она затрагивает вопросы стилей и верстки приложения.

Autoprefixer и стили

Добавим в webpack возможность обрабатывать стили, заодно сразу накинув на них возможности autoprefixer'а.

npm install style-loader css-loader postcss-loader autoprefixer precss --save-dev

P.S. для тех кто пользуется автоматическим способом добавления зависимостей: так как мы добавляем зависимости в webpack.config - npm-insatll-plugin не может подтянуть их автоматически.

webpack.config.js

var path = require('path')
var webpack = require('webpack')
var NpmInstallPlugin = require('npm-install-webpack-plugin')
var autoprefixer = require('autoprefixer');
var precss = require('precss');

module.exports = {
  devtool: 'cheap-module-eval-source-map',
  entry: [
    'webpack-hot-middleware/client',
    'babel-polyfill',
    './src/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  plugins: [
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin(),
    new NpmInstallPlugin()
  ],
  module: {
    preLoaders: [
      {
        test: /\.js$/,
        loaders: ['eslint'],
        include: [
          path.resolve(__dirname, "src"),
        ],
      }
    ],
    loaders: [
      {
        loaders: ['react-hot', 'babel-loader'],
        include: [
          path.resolve(__dirname, "src"),
        ],
        test: /\.js$/,
        plugins: ['transform-runtime'],
      },
      {
        test:   /\.css$/,
        loader: "style-loader!css-loader!postcss-loader"
      }
    ]
  },
  postcss: function () {
    return [autoprefixer, precss];
  }
}

Не забудьте подключить главный файл стилей для всего приложения:

src/index.js

import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import App from './containers/App'
import './styles/app.css'           // <-- импорт стилей
import configureStore from './store/configureStore'

const store = configureStore()

render(
  <Provider store={store}>
    <div className='app'> {/* обернули все в .app */}
      <App />
    </div>
  </Provider>,
  document.getElementById('root')
)

Возможно (если вы копируете код, либо тоже любите одинарные кавычки), wepback выдаст ошибку от ESLint. Для использования одинарной кавычки, исправьте правило "jsx-quotes": [1, "prefer-single"] в файлике .eslintrc

Верстка

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

В реальном приложении, имеет смысл стили для компонентов импортировать в коде самих компонентов, что даст очень большие удобства для переиспользования целых блоков, включая оформление.

Last updated