Redux: Webpack์€ ๋„ˆ๋ฌด ๊ฑฐ๋Œ€ํ•œ bundle.js๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค(์˜ˆ์ œ์—์„œ).

์— ๋งŒ๋“  2015๋…„ 09์›” 26์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: reduxjs/redux

์ €๋Š” ์›นํŒฉ์ด ์ฒ˜์Œ์ž…๋‹ˆ๋‹ค. ์™œ ๊ทธ๋ ‡๊ฒŒ ๋ฌด๊ฑฐ์šด bundle.js๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ž‘์€ ์˜ˆ์ œ๋ผ๋„ ์‹คํ–‰ ์ทจ์†Œ๊ฐ€ ํฌํ•จ๋œ ํ•  ์ผ์€ 1.9MB์ž…๋‹ˆ๋‹ค! ๋” ๋ณต์žกํ•œ ๋‹ค๋ฅธ ์˜ˆ์˜ ๊ฒฝ์šฐ ์•ฝ 2.5MB์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๊ตฌ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ  ํ›Œ๋ฅญํ•œ ์ผ :)

examples infrastructure

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ทธ ์ž์ฒด๋กœ๋Š” ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ ์˜ˆ์ œ๋Š” ํ”„๋กœ๋•์…˜์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๊ตฌ์„ฑ์˜ ์˜ˆ๋Š” ์ „์ฒด Webpack ์ƒ์šฉ๊ตฌ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ตœ์†Œํ•œ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • devtool ์„ 'eval' ์—์„œ 'source-map'
  • webpack.DefinePlugin ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ process.env.NODE_ENV ๋ฅผ 'production'
  • ์ถ•์†Œ๋ฅผ ์œ„ํ•ด webpack.optimize.UglifyJsPlugin ์ถ”๊ฐ€
  • NODE_ENV=production Babel์„ ํ˜ธ์ถœํ•˜์—ฌ .babelrc ๊ฐ€ react-transform ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

์ผ๋ฐ˜์ ์ธ Webpack ํ”„๋กœ๋•์…˜ ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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 ๋Œ“๊ธ€

๊ทธ ์ž์ฒด๋กœ๋Š” ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ ์˜ˆ์ œ๋Š” ํ”„๋กœ๋•์…˜์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๊ตฌ์„ฑ์˜ ์˜ˆ๋Š” ์ „์ฒด Webpack ์ƒ์šฉ๊ตฌ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ตœ์†Œํ•œ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • devtool ์„ 'eval' ์—์„œ 'source-map'
  • webpack.DefinePlugin ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ process.env.NODE_ENV ๋ฅผ 'production'
  • ์ถ•์†Œ๋ฅผ ์œ„ํ•ด webpack.optimize.UglifyJsPlugin ์ถ”๊ฐ€
  • NODE_ENV=production Babel์„ ํ˜ธ์ถœํ•˜์—ฌ .babelrc ๊ฐ€ react-transform ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

์ผ๋ฐ˜์ ์ธ Webpack ํ”„๋กœ๋•์…˜ ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ ์š”์†Œ์˜ ํ…œํ”Œ๋ฆฟ/css/js๋ฅผ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•ด์•ผ ํ•˜์ง€๋งŒ ์š”์ฒญ ์‹œ ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ–๋Š” devtool ์œผ๋กœ inline-source-map ๋Œ€์‹ ์˜ source-map ๋˜ํ•œ ์†Œ์Šค์ง€๋„ (๋†€๋ผ์šด) ์ธ๋ผ์ธ์œผ๋กœ ๋ฐ”๊พธ์–ด ์ถœ๋ ฅ ํŒŒ์ผ์„ ์ผ๊ด„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์—ฐํ•˜์ง€๋งŒ ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฐ„๊ณผํ–ˆ๊ณ  ์•Œ์•„๋‚ด๋Š” ๋ฐ ํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ ๋ฏธ๋ž˜ ์ฐธ์กฐ๋ฅผ ์œ„ํ•ด ์—ฌ๊ธฐ์— ๋‘ก๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰