Redux: рд╡реЗрдмрдкреИрдХ рдмрд╣реБрдд рдмрдбрд╝реЗ рдмрдВрдбрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИредрдЬреЗрдПрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рд╕рд┐рддре░ 2015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: reduxjs/redux

рдореИрдВ рд╡реЗрдмрдкреИрдХ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдБред рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рднрд╛рд░реА рдмрдВрдбрд▓ рдХреНрдпреЛрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИредрдЬреЗрдПрд╕ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЖрдкрдХреЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, todos-with-undo рдпрд╣ 1.9 рдПрдордмреА рд╣реИ! рдЕрдиреНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рдЧрднрдЧ 2.5 рдПрдордмреА рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред
рд╡реИрд╕реЗ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо :)

examples infrastructure

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдкреНрд░рддрд┐ рд╕реЗ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рд╕рд┐рд░реНрдл рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рдмреЛрдЭ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ - рдХреГрдкрдпрд╛ рдЙрддреНрдкрд╛рджрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдлреБрд▓рд░ рд╡реЗрдмрдкреИрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рд▓реЗрдВред

рдХрдо рд╕реЗ рдХрдо рдЖрдк рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:

  • devtool рдХреЛ 'eval' рд╕реЗ 'source-map' рдмрджрд▓реЗрдВ
  • webpack.DefinePlugin рдХреЛ process.env.NODE_ENV рд╕реЗ 'production'
  • рдиреНрдпреВрдирддрдореАрдХрд░рдг рдХреЗ рд▓рд┐рдП webpack.optimize.UglifyJsPlugin рдЬреЛрдбрд╝реЗрдВ
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк NODE_ENV=production рд╕рд╛рде рдмреЗрдмреЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП .babelrc react-transform рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрдмрдкреИрдХ рдЙрддреНрдкрд╛рджрди рд╡рд┐рдиреНрдпрд╛рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

var path = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'source-map',
  entry: [
    './src/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  plugins: [
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.DefinePlugin({
      'process.env': {
        'NODE_ENV': JSON.stringify('production')
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      compressor: {
        warnings: false
      }
    })
  ],
  module: {
    loaders: [{
      test: /\.js$/,
      loaders: ['babel'],
      include: path.join(__dirname, 'src')
    }]
  }
};

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдЙрддреНрдкрд╛рджрди рдореЛрдб рд╕рд╣рд┐рдд рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдпрд╣рд╛рдВ рд╣реИред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреНрд░рддрд┐ рд╕реЗ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рд╕рд┐рд░реНрдл рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рдмреЛрдЭ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ - рдХреГрдкрдпрд╛ рдЙрддреНрдкрд╛рджрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдлреБрд▓рд░ рд╡реЗрдмрдкреИрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рд▓реЗрдВред

рдХрдо рд╕реЗ рдХрдо рдЖрдк рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:

  • devtool рдХреЛ 'eval' рд╕реЗ 'source-map' рдмрджрд▓реЗрдВ
  • webpack.DefinePlugin рдХреЛ process.env.NODE_ENV рд╕реЗ 'production'
  • рдиреНрдпреВрдирддрдореАрдХрд░рдг рдХреЗ рд▓рд┐рдП webpack.optimize.UglifyJsPlugin рдЬреЛрдбрд╝реЗрдВ
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк NODE_ENV=production рд╕рд╛рде рдмреЗрдмреЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП .babelrc react-transform рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрдмрдкреИрдХ рдЙрддреНрдкрд╛рджрди рд╡рд┐рдиреНрдпрд╛рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

var path = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'source-map',
  entry: [
    './src/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  plugins: [
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.DefinePlugin({
      'process.env': {
        'NODE_ENV': JSON.stringify('production')
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      compressor: {
        warnings: false
      }
    })
  ],
  module: {
    loaders: [{
      test: /\.js$/,
      loaders: ['babel'],
      include: path.join(__dirname, 'src')
    }]
  }
};

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдЙрддреНрдкрд╛рджрди рдореЛрдб рд╕рд╣рд┐рдд рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдпрд╣рд╛рдВ рд╣реИред

рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ AsyncRoute рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ/рд╕реАрдПрд╕рдПрд╕/рдЬреЗрдПрд╕ рдХреЛ рдПрдХ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдорд╛рдВрдЧ рдкрд░ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреЗрд╡рд▓ source-map рдмрдЬрд╛рдп devtool рд░реВрдк рдореЗрдВ inline-source-map рд╣реЛрдиреЗ рд╕реЗ рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ (рдЖрд╢реНрдЪрд░реНрдп) рдЗрдирд▓рд╛рдЗрди рдбрд╛рд▓рдХрд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд▓реНрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдПрдХ рдШрдВрдЯреЗ рдХрд╛ рд╕рдордп рд▓рдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕