Skip to content

Commit 3c430e5

Browse files
authored
Merge pull request #537 from kciter/master
Translate Korean
2 parents 39978d8 + ecd8521 commit 3c430e5

19 files changed

+1134
-0
lines changed

โ€Ždocs/LANGS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
* [English](en/)
2+
* [ํ•œ๊ตญ์–ด](ko/)

โ€Ždocs/ko/README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# ์†Œ๊ฐœ
2+
3+
### `vue-loader`๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
4+
5+
`vue-loader`๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋œ Vue ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” Webpack ๋กœ๋”์ž…๋‹ˆ๋‹ค.
6+
7+
![screenshot](http://blog.evanyou.me/images/vue-component.png)
8+
9+
๋‹ค์Œ์€ `vue-loader`๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
10+
11+
- ๊ธฐ๋ณธ์ ์œผ๋กœ ES2015๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
12+
- Vue ์ปดํฌ๋„ŒํŠธ ๊ฐ ์š”์†Œ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ Webpack ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด `<style>`์— SASS, `<template>`์— Jade๋กœ ๊ฐ๊ฐ ์„ค์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
13+
- `<style>`๊ณผ `<template>`์—์„œ ์ฐธ์กฐ๋œ ์ •์  Asset ํŒŒ์ผ์„ ๋ชจ๋“ˆ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  Webpack ๋กœ๋”๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
14+
- ๊ฐ ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค ์ง€์ •๋œ CSS๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
15+
- ๊ฐœ๋ฐœ ์ค‘์— ์ปดํฌ๋„ŒํŠธ hot-reloading์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
16+
17+
ํ•œ ๋งˆ๋””๋กœ Webpack๊ณผ `vue-loader`์˜ ๊ฒฐํ•ฉ์€ Vue.js ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•˜๊ธฐ์œ„ํ•œ ํ˜„๋Œ€์ ์ด๊ณ  ์œ ์—ฐํ•˜๋ฉฐ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์ž‘์—…ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
18+
19+
### Webpack์ด ๋ฌด์—‡์ธ๊ฐ€์š”?
20+
21+
์ด๋ฏธ Webpack์— ์ต์ˆ™ํ•˜๋‹ค๋ฉด ์ด ์„ค๋ช…์„ ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Webpack์„ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”.
22+
23+
[Webpack](http://webpack.github.io/)์€ ๋ชจ๋“ˆ์˜ ๋ฌถ์Œ์ž…๋‹ˆ๋‹ค. ๊ฐ ํŒŒ์ผ์„ ๋ชจ๋“ˆ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ํŒŒ์ผ ๊ฐ„์˜ ์ข…์†์„ฑ์„ ํŒŒ์•…ํ•œ ๋‹ค์Œ ์ •์  Asset์œผ๋กœ ๋ฌถ์–ด์„œ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
24+
25+
![webpack](http://webpack.github.io/assets/what-is-webpack.png)
26+
27+
๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ๋งŽ์€ CommonJS ๋ชจ๋“ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ๋ชจ๋“ˆ๋“ค์€ ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์—์„œ ๋ฐ”๋กœ ์‹คํ–‰๋  ์ˆ˜ ์—†๊ธฐ์— `<script>` ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ "๋ฌถ์–ด"์•ผ ํ•ฉ๋‹ˆ๋‹ค. Webpack์€ `require()` ํ˜ธ์ถœ์„ ํ†ตํ•ด ์˜์กด๋˜์–ด ์žˆ๋Š” ๊ฐ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
28+
29+
์—ฌ๊ธฐ์„œ Webpack์€ ๋ฌถ๋Š”์ผ ์™ธ์—๋„ ๋” ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "๋กœ๋”๋“ค"์„ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์ข… Bundle(๋ฌถ์Œ)์„ ์ถœ๋ ฅํ•˜๊ธฐ ์ „์— ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“  ์œ ํ˜•์˜ ํŒŒ์ผ์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก Webpack์— ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋ด…์‹œ๋‹ค.
30+
31+
- ES2015 ๋˜๋Š” CoffeeScript, TypeScript ๋ชจ๋“ˆ์„ ES5 CommonJS ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
32+
- ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ์ปดํŒŒ์ผ ์ „์— linter๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
33+
- Jade ํ…œํ”Œ๋ฆฟ์„ ์ผ๋ฐ˜ HTML๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  JavaScript ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
34+
- SASS ํŒŒ์ผ์„ ์ผ๋ฐ˜ CSS๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ CSS๋ฅผ `<style>` ํƒœ๊ทธ๋กœ ์‚ฝ์ž…ํ•˜๋Š” JavaScript ์Šค๋‹ˆํŽซ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
35+
- HTML ๋˜๋Š” CSS์—์„œ ์ฐธ์กฐ๋œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒฝ๋กœ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ์ด๋™ํ•œ ํ›„ md5 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
36+
37+
Webpack์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๋ฉฐ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•œ๋‹ค๋ฉด ํ”„๋ก ํŠธ์—”๋“œ ์ž‘์—…ํ™˜๊ฒฝ์„ ํš๊ธฐ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ ์€ ์žฅํ™ฉํ•˜๊ณ  ๋ณต์žกํ•œ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฐ€์ด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Vue.js ๋ฐ `vue-loader`์—์„œ Webpack์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€Ždocs/ko/SUMMARY.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
- [์†Œ๊ฐœ](README.md)
2+
- ์‹œ์ž‘ํ•˜๊ธฐ
3+
- [Vue ์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™](start/spec.md)
4+
- [ํ”„๋กœ์ ํŠธ ์„ธํŒ…ํ•˜๊ธฐ](start/setup.md)
5+
- ๊ธฐ๋Šฅ
6+
- [ES2015](features/es2015.md)
7+
- [๋ฒ”์œ„ CSS](features/scoped-css.md)
8+
- [CSS Modules](features/css-modules.md)
9+
- [PostCSS](features/postcss.md)
10+
- [Hot Reload](features/hot-reload.md)
11+
- ์„ค์ •
12+
- [์ „์ฒ˜๋ฆฌ๊ธฐ](configurations/pre-processors.md)
13+
- [Asset URL ํ•ธ๋“ค๋ง](configurations/asset-url.md)
14+
- [๊ณ ๊ธ‰ ๋กœ๋” ์„ค์ •](configurations/advanced.md)
15+
- [CSS ๋‹จ์ผ ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๊ธฐ](configurations/extract-css.md)
16+
- ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
17+
- [๋ฐฐํฌ์šฉ ๋นŒ๋“œ](workflow/production.md)
18+
- [Linting](workflow/linting.md)
19+
- [ํ…Œ์ŠคํŠธ](workflow/testing.md)
20+
- [๋ชฉ์—…์„ ์ด์šฉํ•œ ํ…Œ์ŠคํŠธ](workflow/testing-with-mocks.md)
21+
- [์˜ต์…˜ ๋ ˆํผ๋Ÿฐ์Šค](options.md)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# ๊ณ ๊ธ‰ ๋กœ๋” ์„ค์ •
2+
3+
๋•Œ๋กœ๋Š” `vue-loader`๊ฐ€ ๊ทธ๊ฒƒ์„ ์ถ”๋ก ํ•˜๋Š” ๋Œ€์‹  ์–ธ์–ด์— ์ปค์Šคํ…€ ๋กœ๋” ์ŠคํŠธ๋ง์„ ์ ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋””ํดํŠธ ์–ธ์–ด์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋กœ๋” ์„ค์ •์„ ๋ฎ์–ด์“ฐ๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ Webpack ์„ค์ • ํŒŒ์ผ์— `vue` ๋ธ”๋Ÿญ์„ ์ถ”๊ฐ€ํ•˜๊ณ  `loaders` ์˜ต์…˜์„ ์ง€์ •ํ•˜์„ธ์š”.
4+
5+
### Webpack 1.x
6+
7+
``` js
8+
// webpack.config.js
9+
module.exports = {
10+
// ์ด ๋ถ€๋ถ„์—” ๋‹ค๋ฅธ ์˜ต์…˜๋„ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
11+
module: {
12+
loaders: [
13+
{
14+
test: /\.vue$/,
15+
loader: 'vue'
16+
}
17+
]
18+
},
19+
// vue-loader ์„ค์ •
20+
vue: {
21+
// ์ด ๋ถ€๋ถ„์—” ๋‹ค๋ฅธ Vue ์˜ต์…˜๋„ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
22+
loaders: {
23+
// coffee-loader์— "lang" ์†์„ฑ์ด ์—†๋Š” ๋ชจ๋“  <script>๋ฅผ ๋กœ๋“œํ•˜์„ธ์š”.
24+
js: 'coffee',
25+
// <template>์„ HTML ๋ฌธ์ž์—ด๋กœ ์ง์ ‘ ๋กœ๋“œํ•˜๋ฉด
26+
// vue-html-loader๋ฅผ ํ†ตํ•ด ํŒŒ์ดํ•‘ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
27+
html: 'raw'
28+
}
29+
}
30+
}
31+
```
32+
33+
### Webpack 2.x (^2.1.0-beta.25)
34+
35+
``` js
36+
module.exports = {
37+
// ์ด ๋ถ€๋ถ„์—” ๋‹ค๋ฅธ ์˜ต์…˜๋„ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
38+
module: {
39+
// module.rules๋Š” 1.x์˜ module.loaders์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
40+
rules: [
41+
{
42+
test: /\.vue$/,
43+
loader: 'vue',
44+
// vue-loader ์˜ต์…˜์€ ์ด๊ณณ์— ์˜ต๋‹ˆ๋‹ค.
45+
options: {
46+
loaders: {
47+
// ...
48+
}
49+
}
50+
}
51+
]
52+
}
53+
}
54+
```
55+
56+
๊ณ ๊ธ‰ ๋กœ๋” ์„ค์ •์„ ๋ณด๋‹ค ์‹ค์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด [์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ CSS๋ฅผ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค](./extract-css.md).
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Asset URL ํ•ธ๋“ค๋ง
2+
3+
๊ธฐ๋ณธ์ ์œผ๋กœ, `vue-loader`๋Š” [css-loader](https://github.com/webpack/css-loader)์™€ Vue ํ…œํ”Œ๋ฆฟ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์Šคํƒ€์ผ๊ณผ ํ…œํ”Œ๋ฆฟ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ `<img src="...">`, `background: url(...)`, CSS `@import`์™€ ๊ฐ™์€ ๋ชจ๋“  Asset URL์€ **๋ชจ๋“ˆ ์ข…์†์„ฑ**์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
4+
5+
์˜ˆ๋ฅผ ๋“ค์–ด, `url(./image.png)`๋Š” `require('./image.png')`๋กœ ๋ณ€ํ™˜๋˜์–ด,
6+
7+
``` html
8+
<img src="../image.png">
9+
```
10+
11+
๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปดํŒŒ์ผ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
12+
13+
``` js
14+
createElement('img', { attrs: { src: require('../image.png') }})
15+
```
16+
17+
์™œ๋ƒํ•˜๋ฉด `.png`๋Š” Javscript ํŒŒ์ผ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— [file-loader](https://github.com/webpack/file-loader) ๋˜๋Š” [url-loader](https://github.com/webpack/url-loader)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Webpack์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก Webpack์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. `vue-cli`๋กœ ์Šค์บํด๋”ฉ๋œ ํ”„๋กœ์ ํŠธ๋„ ์ด๊ฒƒ์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
18+
19+
์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
20+
21+
1. `file-loader`๋Š” ๋‹น์‹ ์ด Asset ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ๊ณณ์„ ์ง€์ •ํ•˜๊ณ  ๋” ๋‚˜์€ ์บ์‹ฑ์„ ์œ„ํ•ด ๋ฒ„์ „ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ๋‚˜์•„๊ฐ€ **์ด๊ฒƒ์€ `*.vue` ํŒŒ์ผ ์˜†์— ์ด๋ฏธ์ง€๋ฅผ ๋†“๊ณ  ๋ฐฐํฌ URL์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ํด๋” ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค**. ์˜ฌ๋ฐ”๋ฅธ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด Webpack์€ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ฒˆ๋“ค ์•„์›ƒํ’‹์„ ์˜ฌ๋ฐ”๋ฅธ URL๋กœ ์ž๋™์œผ๋กœ ์žฌ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
22+
23+
2. `url-loader`๋Š” ํŒŒ์ผ์ด ์ฃผ์–ด์ง„ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ์กฐ๊ฑด๋ถ€๋กœ ํŒŒ์ผ์„ base-64 ๋ฐ์ดํ„ฐ URL๋กœ ์ธ๋ผ์ธ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์‚ฌ์†Œํ•œ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ HTTP ์š”์ฒญ์˜ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์ฃผ์–ด์ง„ ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์ž๋™์œผ๋กœ `file-loader`๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# CSS ๋‹จ์ผ ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๊ธฐ
2+
3+
๋‹ค์Œ ์˜ˆ์ œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  Vue ์ปดํฌ๋„ŒํŠธ์˜ ์ฒ˜๋ฆฌ๋œ CSS๋ฅผ ๋‹จ์ผ CSS ํŒŒ์ผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
4+
5+
### Webpack 1.x
6+
7+
``` bash
8+
npm install extract-text-webpack-plugin --save-dev
9+
```
10+
11+
``` js
12+
// webpack.config.js
13+
var ExtractTextPlugin = require("extract-text-webpack-plugin")
14+
15+
module.exports = {
16+
// ์ด ๋ถ€๋ถ„์—” ๋‹ค๋ฅธ ์˜ต์…˜๋„ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
17+
module: {
18+
loaders: [
19+
{
20+
test: /\.vue$/,
21+
loader: 'vue'
22+
},
23+
]
24+
},
25+
vue: {
26+
loaders: {
27+
css: ExtractTextPlugin.extract("css"),
28+
// ๋‹น์‹ ์€ <style lang="less"> ๋˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
29+
less: ExtractTextPlugin.extract("css!less")
30+
}
31+
},
32+
plugins: [
33+
new ExtractTextPlugin("style.css")
34+
]
35+
}
36+
```
37+
38+
### Webpack 2.x (^2.1.0-beta.25)
39+
40+
``` bash
41+
npm install [email protected] --save-dev
42+
```
43+
44+
``` js
45+
// webpack.config.js
46+
var ExtractTextPlugin = require("extract-text-webpack-plugin")
47+
48+
module.exports = {
49+
// ์ด ๋ถ€๋ถ„์—” ๋‹ค๋ฅธ ์˜ต์…˜๋„ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
50+
module: {
51+
rules: [
52+
{
53+
test: /\.vue$/,
54+
loader: 'vue',
55+
options: {
56+
loaders: {
57+
css: ExtractTextPlugin.extract({
58+
loader: 'css-loader',
59+
fallbackLoader: 'vue-style-loader' // <- ์ด๊ฒƒ์€ vue-loader๊ฐ€ ํ•„์š” ์—†์œผ๋ฏ€๋กœ npm3๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
60+
})
61+
}
62+
}
63+
}
64+
]
65+
},
66+
plugins: [
67+
new ExtractTextPlugin("style.css")
68+
]
69+
}
70+
```
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# ์ „์ฒ˜๋ฆฌ๊ธฐ ์‚ฌ์šฉํ•˜๊ธฐ
2+
3+
Webpack์—์„œ๋Š” ๋ชจ๋“  ์ „์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ํ•ด๋‹น ๋กœ๋”์™€ ํ•จ๊ป˜ ์ ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. `vue-loader`๋Š” ๋‹ค๋ฅธ Webpack ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Vue ์ปดํฌ๋„ŒํŠธ์˜ ์ผ๋ถ€๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•ฉ๋‹ˆ๋‹ค. language block์˜ `lang` ์†์„ฑ์—์„œ ์‚ฌ์šฉํ•  ์ ์ ˆํ•œ ๋กœ๋”๋ฅผ ์ž๋™์œผ๋กœ ์œ ์ถ”ํ•ฉ๋‹ˆ๋‹ค.
4+
5+
### CSS
6+
7+
์˜ˆ๋ฅผ ๋“ค์–ด, SASS๋กœ `<style>`์„ ์ปดํŒŒ์ผํ•ด๋ด…์‹œ๋‹ค.
8+
9+
``` bash
10+
npm install sass-loader node-sass --save-dev
11+
```
12+
13+
``` html
14+
<style lang="sass">
15+
/* write sass here */
16+
</style>
17+
```
18+
19+
๋‚ด๋ถ€์ ์œผ๋กœ, `<style>` ํƒœ๊ทธ ์•ˆ์˜ ํ…์ŠคํŠธ ๋‚ด์šฉ์€ ํ›„์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ์ „๋‹ฌ๋˜๊ธฐ ์ „์— `sass-loader`์— ์˜ํ•ด ๋จผ์ € ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.
20+
21+
### Javascript
22+
23+
Vue ์ปดํฌ๋„ŒํŠธ ๋‚ด์˜ ๋ชจ๋“  Javascript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ `babel-loader`์— ์˜ํ•ด์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
24+
25+
``` bash
26+
npm install coffee-loader --save-dev
27+
```
28+
29+
``` html
30+
<script lang="coffee">
31+
# Write coffeescript!
32+
</script>
33+
```
34+
35+
### Templates
36+
37+
`pug-loader`์™€ ๊ฐ™์€ ๋Œ€๋ถ€๋ถ„์˜ Webpack ํ…œํ”Œ๋ฆฟ ๋กœ๋”๋Š” ์ปดํŒŒ์ผ๋œ HTML ๋ฌธ์ž์—ด ๋Œ€์‹  ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…œํ”Œ๋ฆฟ ์ฒ˜๋ฆฌ ์•ž์„œ ์ฒ˜๋ฆฌํ•œ ๋ฐฉ๋ฒ•๊ณผ๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. `pug-loader` ๋Œ€์‹  ์›๋ž˜์˜ `pug` ํŒŒ์ผ์„ ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
38+
39+
``` bash
40+
npm install pug --save-dev
41+
```
42+
43+
``` html
44+
<template lang="pug">
45+
div
46+
h1 Hello world!
47+
</template>
48+
```
49+
50+
> **์ค‘์š”:** ๋งŒ์•ฝ ๋‹น์‹ ์ด `vue-loader@<8.2.0`์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋‹น์‹ ์€ `template-html-loader`๋„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
51+
52+
### ์ธ๋ผ์ธ ๋กœ๋” ์š”์ฒญ
53+
54+
๋‹น์‹ ์€ `lang` ์†์„ฑ์—์„œ [Webpack ๋กœ๋” ์š”์ฒญ](https://webpack.github.io/docs/loaders.html#introduction)์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
55+
56+
``` html
57+
<style lang="sass?outputStyle=expanded">
58+
/* ์—ฌ๊ธฐ์— SASS๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”! */
59+
</style>
60+
```
61+
62+
๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ Vue ์ปดํฌ๋„ŒํŠธ๊ฐ€ Webpack์— ํ•œ์ •๋˜์–ด ์žˆ๊ณ  Browserify ๋ฐ [vueify](https://github.com/vuejs/vueify)์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. **Vue ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์จ๋“œํŒŒํ‹ฐ๋กœ ์ œ๊ณตํ•˜๋ ค๋ฉด ์ด ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.**

โ€Ždocs/ko/features/css-modules.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# CSS Modules
2+
3+
> requires ^9.8.0
4+
5+
[CSS Modules](https://github.com/css-modules/css-modules)์€ CSS์„ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. `vue-loader`๋Š” ์Šค๋ฎฌ๋ ˆ์ดํŠธ๋œ ๋ฒ”์œ„ CSS์˜ ๋Œ€์•ˆ์œผ๋กœ CSS Modules์™€ ํ•จ๊ป˜ first-class intergration์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
6+
7+
### ์‚ฌ์šฉ๋ฒ•
8+
9+
`<style>`์— `moudle` ์†์„ฑ์„ ์‚ฝ์ž…ํ•˜๋‹ˆ๋‹ค.
10+
11+
``` html
12+
<style module>
13+
.red {
14+
color: red;
15+
}
16+
.bold {
17+
font-weight: bold;
18+
}
19+
</style>
20+
```
21+
22+
์ด๋ ‡๊ฒŒํ•˜๋ฉด `css-loader`์— ๋Œ€ํ•œ CSS Modules ๋ชจ๋“œ๊ฐ€ ์ผœ์ง€๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ํด๋ž˜์Šค ์‹๋ณ„์ž ์˜ค๋ธŒ์ ํŠธ๋Š” `$style` ์ด๋ฆ„์˜ ๊ณ„์‚ฐ๋œ ์†์„ฑ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์— ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋™์  ํด๋ž˜์Šค ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
23+
24+
``` html
25+
<template>
26+
<p :class="$style.red">
27+
์ด๊ฒƒ์€ ๋นจ๊ฐ„์ƒ‰์ด์•ผ
28+
</p>
29+
</template>
30+
```
31+
32+
๊ทธ๊ฒƒ์€ ๊ณ„์‚ฐ๋œ ์†์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— `:class`์˜ ์˜ค๋ธŒ์ ํŠธ/๋ฐฐ์—ด ๋ฌธ๋ฒ•์—๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
33+
34+
``` html
35+
<template>
36+
<div>
37+
<p :class="{ [$style.red]: isRed }">
38+
๋‚˜๋Š” ๋นจ๊ฐ„์ƒ‰์ด์•ผ?
39+
</p>
40+
<p :class="[$style.red, $style.bold]">
41+
๋‚˜๋Š” ๋นจ๊ฐ„์ƒ‰์ด๋ฉด์„œ ๋ณผ๋“œ์•ผ
42+
</p>
43+
</div>
44+
</template>
45+
```
46+
47+
๋˜ํ•œ JavaScript์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
48+
49+
``` html
50+
<script>
51+
export default {
52+
created () {
53+
console.log(this.$style.red)
54+
// -> "_1VyoJ-uZOjlOxP7jWUy19_0"
55+
// ํŒŒ์ผ ์ด๋ฆ„๊ณผ className์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ์‹๋ณ„์ž
56+
}
57+
}
58+
</script>
59+
```
60+
61+
[global exceptions](https://github.com/css-modules/css-modules#exceptions)๊ณผ [composition](https://github.com/css-modules/css-modules#composition) ๊ฐ™์€ ์ž์„ธํ•œ ์ •๋ณด๋Š” [CSS Modules ์ŠคํŽ™](https://github.com/css-modules/css-modules)์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
62+
63+
### ์†์„ฑ ์ด๋ฆ„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•
64+
65+
ํ•˜๋‚˜์˜ `*.vue` ์ปดํฌ๋„ŒํŠธ ๋‚ด์— ํ•˜๋‚˜ ์ด์ƒ์˜ `<style>` ํƒœ๊ทธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฝ์ž…๋œ ์Šคํƒ€์ผ์ด ์„œ๋กœ ๋ฎ์–ด ์“ฐ์ง€ ์•Š๊ฒŒํ•˜๋ ค๋ฉด `module` ์†์„ฑ์— ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ๊ณ„์‚ฐ๋œ ์†์„ฑ์˜ ์ด๋ฆ„์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
66+
67+
``` html
68+
<style module="a">
69+
/* a๋กœ ์ฃผ์ž…๋œ ์‹๋ณ„์ž */
70+
</style>
71+
72+
<style module="b">
73+
/* b๋กœ ์ฃผ์ž…๋œ ์‹๋ณ„์ž */
74+
</style>
75+
```
76+
77+
### `css-loader` ์ฟผ๋ฆฌ ์„ค์ •
78+
79+
CSS Modules๋Š” [css-loader](https://github.com/webpack/css-loader)๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. `<style module>`์„ ์‚ฌ์šฉํ•˜๋ฉด `css-loader`์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์ฟผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
80+
81+
``` js
82+
{
83+
modules: true,
84+
importLoaders: true,
85+
localIdentName: '[hash:base64]'
86+
}
87+
```
88+
89+
๋‹น์‹ ์€ vue-loader์˜ `cssModules` ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ `css-loader`์— ์ถ”๊ฐ€์ ์ธ ์ฟผ๋ฆฌ ์˜ต์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
90+
91+
``` js
92+
// webpack 1
93+
vue: {
94+
cssModules: {
95+
// ๋กœ์ปฌ ID๊ฐ’์„ ๋ฎ์–ด์”Œ์›๋‹ˆ๋‹ค.
96+
localIdentName: '[path][name]---[local]---[hash:base64:5]',
97+
// enable camelCase
98+
camelCase: true
99+
}
100+
}
101+
102+
// webpack 2
103+
module: {
104+
rules: [
105+
{
106+
test: '\.vue$',
107+
loader: 'vue',
108+
options: {
109+
cssModules: {
110+
localIdentName: '[path][name]---[local]---[hash:base64:5]',
111+
camelCase: true
112+
}
113+
}
114+
}
115+
]
116+
}
117+
```

0 commit comments

Comments
ย (0)