Razzle: 이미지 및 기타 정적 μžμ‚°μ„λ‘œλ“œν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

에 λ§Œλ“  2016λ…„ 04μ›” 25일  Β·  17μ½”λ©˜νŠΈ  Β·  좜처: jaredpalmer/razzle

μ•ˆλ…•ν•˜μ„Έμš”,

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ λͺ¨λ‘μ—μ„œ μž‘λ™ν•˜λŠ” 이미지 및 기타 μžμ‚°μ„λ‘œλ“œν•˜λŠ” κ°€μž₯ 쒋은 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
url-loader 및 file-loader λ₯Ό webpack ꡬ성에 μΆ”κ°€ ν•  수 μžˆμ§€λ§Œ μ„œλ²„μ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€λ₯Έ μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

감사,
λž€.

bug question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@justingreenberg babel-registerλŠ” 이미지 파일 μœ ν˜•μ„ 처리 ν•  수 β€‹β€‹μ—†μŠ΅λ‹ˆλ‹€. ν•΄κ²° 방법은 μ„œλ²„ λ₯Ό μˆ˜μ •ν•˜λŠ” 것

require('babel-register');
if (process.env.NODE_ENV == 'development') {
  require.extensions['.png'] = function () {};
  require.extensions['.jpg'] = function () {};
  require.extensions['.jpeg'] = function () {};
  require.extensions['.woff'] = function () {};
  require.extensions['.woff2'] = function () {};
  require.extensions['.ico'] = function () {};
  require.extensions['.svg'] = function () {};
}
require('./server');

λͺ¨λ“  17 λŒ“κΈ€

예λ₯Ό λ“€μ–΄ κΈ€κΌ΄μ˜ 경우 λ‹€μŒμ„ μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

,
{
  test: /\.(woff)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
  loader: "url?limit=100000&mimetype=application/font-woff"
}

μ„œλ²„κ°€ 이미지 ν™•μž₯자λ₯Ό μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. ssr에 ν•„μš”ν•œ 후크λ₯Ό μ‚¬μš©ν•΄μ•Όν•©λ‹ˆλ‹€.
https://github.com/bahmutov/node-hook

λ˜ν•œμ΄ 파일 μ„œλ²„μ— μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

require('babel-register')
if (development variable) require.extensions['.png'] = function () {};
require('./server')

https://github.com/tcoopman/image-webpack-loader λ₯Ό μ‚¬μš©ν•˜μ—¬ 이미지λ₯Ό μ²˜λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. 파일 λ‘œλ”λ₯Ό κΈ°λ°˜μœΌλ‘œν•œλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ 이미지λ₯Ό μ΅œμ ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이거 λ‹«μ•„

@jaredpalmer μ•ˆλ…•ν•˜μ„Έμš”, ꡉμž₯ν•œ ν‚€νŠΈμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€ :)이 백업을

// logo-component.js
import LogoImage from './logo.png' // colocated image in component folder

export default ({ linkUrl }) =>
  <a href={linkUrl}>
    <img src={LogoImage} alt="Logo" /> 
  </a>

μœ„μ˜ 경우λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ webpack-isomorphic-tools 을 μ‚¬μš©ν–ˆμ§€λ§Œ μž‘λ™ν•˜μ§€λ§Œ 인체 곡학 및 섀정이 맀우 λΆ€μ„œμ§€κΈ° 쉽고 엉망인 λŠλ‚Œμ΄ λ“€μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•˜λ €κ³ ν•©λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ˜ 생각을 λ“£κ³  정말 쒋을 κ²ƒμž…λ‹ˆλ‹€. μ ‘κ·Ό 방식- assets.json 도 톡계에 μ‚¬μš©λ  μˆ˜μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μ‹œ ν•œ 번 jaredμ—κ²Œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. 제곡 ν•  μˆ˜μžˆλŠ” λͺ¨λ“  λ°©ν–₯, μƒμš©κ΅¬ λ˜λŠ” μ›ΉνŒ© ꡬ성은 λŒ€λ‹¨νžˆ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. μŠ€νƒ€ν„°μ— μΆ”κ°€ν•˜κ³  싢은 것이 있으면 PR을 μ œμΆœν•΄ λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ•„λ§ˆ λ‚΄κ°€ μ•„μ£Ό κ°„λ‹¨ν•œ 해결책을 κ°„κ³Όν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•œλ‹€ .... λ‹€μ‹œ κ°μ‚¬ν•œλ‹€ !! :)

npm을 톡해 url-loader λ₯Ό μ„€μΉ˜ν•˜κ³  각 webpack.config에 λ‹€μŒμ„ μΆ”κ°€ν•˜κΈ° λ§Œν•˜λ©΄λ©λ‹ˆλ‹€.

      ....
      {
        test: /\.(gif|jpe?g|png|ico)$/,
        loader: 'url-loader?limit=10000'
      },
      {
        test: /\.(otf|eot|svg|ttf|woff|woff2).*$/,
        loader: 'url-loader?limit=10000'
      }
      ...

그런 λ‹€μŒ μœ„μ—μ„œ μ„€λͺ…ν•œλŒ€λ‘œ μ •ν™•νžˆ μš”κ΅¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. BTW limit 맀개 λ³€μˆ˜λŠ” μ‹€μ œλ‘œ 이미지λ₯Ό μƒμ„±ν•΄μ•Όν•˜λŠ” μž„κ³„ κ°’κ³Ό data-uriλ₯Ό μƒμ„±ν•΄μ•Όν•˜λŠ” μž„κ³„ κ°’μ—μ„œ url-loader λ₯Ό μ•Œλ €μ€λ‹ˆλ‹€.

νŽΈμ§‘ν•˜λ‹€:

λ˜ν•œ μ›ΉνŒ© μ„œλ²„ κ΅¬μ„±μ—μ„œ new webpack.IgnorePlugin(/\.(css|less|scss|svg|png|jpe?g|png)$/), λ₯Ό μ œκ±°ν•˜μ‹­μ‹œμ˜€.

@jaredpalmer 응닡에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€ :) μ •ν™•νžˆ λ‚΄κ°€ https://www.npmjs.com/package/webpack-isomorphic-toolsλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμ—ˆμ§€λ§Œ 정말 λŠλ‚Œ 맀우 νˆ¬λ°•ν•œ ...

@ rowellx68 image-webpack-loaderλ₯Ό μ‚¬μš©ν•˜μ—¬ μ–ΈκΈ‰

@ b2 node-hook μ†”λ£¨μ…˜μ— λŒ€ν•œ μΆ”κ°€ μ»¨ν…μŠ€νŠΈ λ‚˜ 예제λ₯Ό 제곡 ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? ν•˜λ‚˜μ˜ λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ μžμ‚° ν”ŒλŸ¬κ·ΈμΈκ³Ό ν†΅ν•©ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

@justingreenberg babel-registerλŠ” 이미지 파일 μœ ν˜•μ„ 처리 ν•  수 β€‹β€‹μ—†μŠ΅λ‹ˆλ‹€. ν•΄κ²° 방법은 μ„œλ²„ λ₯Ό μˆ˜μ •ν•˜λŠ” 것

require('babel-register');
if (process.env.NODE_ENV == 'development') {
  require.extensions['.png'] = function () {};
  require.extensions['.jpg'] = function () {};
  require.extensions['.jpeg'] = function () {};
  require.extensions['.woff'] = function () {};
  require.extensions['.woff2'] = function () {};
  require.extensions['.ico'] = function () {};
  require.extensions['.svg'] = function () {};
}
require('./server');

@justingreenberg image-webpack-loader λŠ” 이미지λ₯Ό μ΅œμ ν™”ν•©λ‹ˆλ‹€ ... file-loader 와 ν•¨κ»˜ μ‚¬μš©ν•©λ‹ˆλ‹€.

...
      {
        test: /\.(png|jpg|jpeg|gif)(\?.*)?$/,
        loaders: [
          'file',
          'image-webpack?' + JSON.stringify({
            bypassOnDebug:true,
            progressive: true,
            optimizationLevel: 7,
            interlaced: true,
            pngquant: {
              quality: "65-90",
              speed: 4
            },
            svgo: {
              removeUnknownsAndDefaults: false,
              cleanupIDs: false
            }
          })
        ]
      },

λ‚˜λŠ” μ—¬μ „νžˆ κΈ€κΌ΄κ³Ό svg에 url-loader λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

@ rowellx68 @ b2whats μš°λ¦¬λŠ” url-loader 둜 이것에 λŒ€ν•œ PR을 λ§Œλ“€μ–΄μ•Όν•©λ‹ˆκΉŒ? devμ—μ„œ require.extension 단점은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? μΆ”μ•…ν•˜μ§€λ§Œ dev IMHOλ₯Ό μœ„ν•΄ μ„œλ²„λ₯Ό λ²ˆλ“€λ‘œ λ¬ΆλŠ” 것보닀 κΉ¨λ—ν•©λ‹ˆλ‹€. πŸ€”

@jaredpalmer re : νŒ¨μΉ˜μ—λŠ” ν•΄κ²° 방법이 ν•„μš”ν•©λ‹ˆλ‹€. 이것은 ν₯미둜운 μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€. λ”°λΌμ„œ require에 μˆ˜λ™μœΌλ‘œ ν™•μž₯을 λ“±λ‘ν•˜λ©΄ λͺ¨λ“ˆμ΄ url-loader ) λˆ„λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

re : image-webpack, 그건 λ‚΄ 이해 μ˜€μ§€λ§Œ (정말 μ΅œμ ν™”) @ rowellx68 이 이미지에 μ‚¬μš©ν•˜κ³  μžˆλ‹€κ³ 

λ‹€μ‹œ ν•œλ²ˆ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

@jaredpalmer require.extensions κ°€ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

@justingreenberg re : image-webpack-loader . μ‹€μ œλ‘œ 주둜 이미지 μ΅œμ ν™”λ₯Όμœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κ²°κ³Ό μ΄λ―Έμ§€λŠ” assest.json μΆ”κ°€λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λΏ‘λΏ‘
슬라이슀 개발 및 μ œν’ˆ λͺ¨λ“œκ°€ ν•„μš”ν•©λ‹ˆλ‹€. webpack ꡬ성은 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 개발 λͺ¨λ“œμ—μ„œλŠ” μ„œλ²„μ—μ„œ μ΄λ―Έμ§€μ˜ 일반 URL을 κ°€μ Έμ™€μ•Όν•©λ‹ˆλ‹€. prod λͺ¨λ“œμ—μ„œλŠ” λͺ¨λ“  μ΅œμ ν™”λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λΉŒλ“œ 슀크립트λ₯Ό μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. 이제 robots.txt, favicon λ“±μ„μœ„ν•œ pbulic 폴더가 μžˆμŠ΅λ‹ˆλ‹€. "μ™„λ²½ν•œ μ†”λ£¨μ…˜"은 μ•„λ‹ˆμ§€λ§Œ μž‘λ™ν•©λ‹ˆλ‹€. λ²ˆλ“€ js-> public/assets (git에 μ²΄ν¬μΈλ˜μ§€ μ•ŠμŒ).

즉, 인라인 μΊμ‹œ λ¬΄νš¨ν™”λ₯Ό ν—ˆμš©ν•˜λŠ” κ²ƒμ²˜λŸΌ '의 requireHooks μ†”λ£¨μ…˜μ„ @justingreenberg λͺ¨μƒ‰ ν•  κ²ƒμž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, 이것이 λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ 경우 μ•Œλ €μ£Όμ‹­μ‹œμ˜€. κ·ΈλŸ¬λ‚˜ 정적 μžμ‚° λ…Όμ˜λŠ” λ‹€μ†Œ κ΄€λ ¨μ΄μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” μ›ΉνŒ© 세계에 μƒλ‹Ήνžˆ μ΅μˆ™ν•˜μ§€ μ•Šμ€ μ‚¬λžŒμ΄κ³  (μ½λŠ” 방법 : 아직 μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•œ λ‹¨μ„œκ°€ μ—†μŒ)이 ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ˜ μŠ€νƒ€μΌ κ°€μ΄λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή 앱을 κ΅¬μΆ•ν•˜λ €κ³ ν•©λ‹ˆλ‹€. CSS μŠ€νƒ€μΌμ„ λ°˜λ³΅ν•΄μ„œ μ μš©ν•˜λŠ” λŒ€μ‹  ν΄λΌμ΄μ–ΈνŠΈμ˜ μŠ€νƒ€μΌ κ°€μ΄λ“œκ°€ 포함 된 CSS νŒŒμΌμ„λ‘œλ“œν•˜λ €κ³ ν•©λ‹ˆλ‹€. μŠ€νƒ€μΌ μ‹œνŠΈλ₯Ό μ •μ μœΌλ‘œλ‘œλ“œ ν•œ λ‹€μŒ μ•„ν”„λ‘œλ””ν…Œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ ˆμ΄μ•„μ›ƒ 등을 κ΄€λ¦¬ν•˜λŠ” λΉ λ₯΄κ³  μƒλŒ€μ μœΌλ‘œ κ³ ν†΅μ—†λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

target: 'node' μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μ›ΉνŒ©κ³Ό ν•¨κ»˜ μ„œλ²„ ν•­λͺ©μ„ λ²ˆλ“€λ§ν•˜λŠ” 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ?
μš°λ¦¬λŠ” λ…Έλ“œμ˜ require ()λ₯Ό ν•΄ν‚Ήν•˜κ±°λ‚˜ webpack-isomorphic-toolsλ₯Ό μ‚¬μš©ν•  ν•„μš”μ—†μ΄ μ„œλ²„ μΈ‘μ—μ„œ λͺ¨λ“  μ›ΉνŒ© λ‘œλ”λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ•„λ‹ˆλ©΄ λ‚΄κ°€ 보지 λͺ»ν•œμ΄ μ ‘κ·Ό 방식에 μ€‘λŒ€ν•œ 문제 λ‚˜ 단점이 μžˆμŠ΅λ‹ˆκΉŒ? κ°œλ°œν•  λ•Œ 두 개의 μ›ΉνŒ© μ‹œκ³„κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

νŽΈμ§‘ : 이미 prodλ₯Ό μœ„ν•΄ μˆ˜ν–‰λ˜κ³  μžˆμ§€λ§Œ dev도 μ•„λ‹Œ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

krazyjakee picture krazyjakee  Β·  3μ½”λ©˜νŠΈ

GouthamKD picture GouthamKD  Β·  3μ½”λ©˜νŠΈ

JacopKane picture JacopKane  Β·  3μ½”λ©˜νŠΈ

knipferrc picture knipferrc  Β·  5μ½”λ©˜νŠΈ

ewolfe picture ewolfe  Β·  4μ½”λ©˜νŠΈ