๐ฆ ์ ์
Parcel ์ ์ ์ (assets)์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ ์ ์ ์ด๋ค ํ์ผ๋ก๋ ํํ๋ ์ ์์ต๋๋ค๋ง, Parcel ์ JavaScript, CSS, ๊ทธ๋ฆฌ๊ณ HTML ํ์ผ๊ณผ ๊ฐ์ ํน์ ์ ํ์ ์ ์ ์ ํน๋ณ ์ง์ ํฉ๋๋ค. Pacel ์ ์ด ํ์ผ๋ค ์์ ์ฐธ์กฐ์์ ์๋์ผ๋ก ์์กด์ฑ์ ๋ถ์ํ๊ณ ์ถ๋ ฅ ๋ฒ๋ค์ ํฌํจ์ํต๋๋ค. ๋น์ทํ ์ ํ์ ์ ์ ๋ค์ ๊ฐ์ ์ถ๋ ฅ ๋ฒ๋ค๋ก ํจ๊ป ๊ทธ๋ฃนํ ํฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ์ ํ์ ์ ์ ์ ์ํฌํธ ํ๋ค๋ฉด (์๋ฅผ ๋ค๋ฉด, JS ํ์ผ์์ CSS ํ์ผ์ ์ํฌํธ ํ๋ค๋ฉด), ์์ ๋ฒ๋ค์ด ๋ง๋ค์ด์ง๊ณ ๋ถ๋ชจ ๋ฒ๋ค์๊ฒ ์ฐธ์กฐ๋ฅผ ๋จ๊น๋๋ค. ํ์ ์น์ ์์ ์ด์ ๋ํด ์ค๋ช ํ ๊ฒ์ ๋๋ค.
JavaScript
์น ๋ฒ๋ค๋ฌ์ ์์ด JavaScript ๋ ๊ฐ์ฅ ์ ํต์ ์ธ ํ์ผ ์ ํ์
๋๋ค. ํ์ผ ์ํฌํ
์ ์ํด Parcel ์ CommonJS ์ ES6 ๋ชจ๋ ๊ตฌ๋ฌธ์ ๋ชจ๋ ์ง์ํฉ๋๋ค. ๋ํ ๋น๋๊ธฐ์ ์ธ ๋ชจ๋ ๋ก๋๋ฅผ ์ํด ๋ค์ด๋๋ฏน import()
ํจ์ ๊ตฌ๋ฌธ์ ์ง์ํฉ๋๋ค. ์ด์ ๋ํด์ ์ฝ๋ ๋ถํ ์น์
์์ ๋ค๋ฃฐ ๊ฒ์
๋๋ค.
// CommonJS ๊ตฌ๋ฌธ์ผ๋ก ๋ชจ๋ ์ํฌํธ
const dep = require('./path/to/dep')
// ES6 import ๊ตฌ๋ฌธ์ผ๋ก ๋ชจ๋ ์ํฌํธ
import dep from './path/to/dep'
JavaScript ํ์ผ์ JavaScript ๊ฐ ์๋ ์ ์ ๋ํ ์ํฌํธ ํ ์ ์์ต๋๋ค. CSS ๋ ์ด๋ฏธ์ง ํ์ผ๋ ๋ฉ๋๋ค. ์ด๋ฐ ํ์ผ๋ค์ ์ํฌํธ ํ ๋, ๋ค๋ฅธ ๋ฒ๋ค๋ฌ๋ค์ฒ๋ผ ์ธ๋ผ์ธํ ๋์ง ์์ต๋๋ค. ๋์ , ๊ทธ ํ์ผ์ ๋ชจ๋ ์์กด ํญ๋ชฉ๊ณผ ํจ๊ป ๋ณ๋์ ๋ฒ๋ค(์๋ก CSS ํ์ผ)์์ ์์นํ๊ฒ ๋ฉ๋๋ค. CSS Modules์ ์ฌ์ฉํ ์, ์ถ์ถ ๋ ํด๋์ค๋ค์ JavaScript ๋ฒ๋ค์ ์์นํฉ๋๋ค. ๋ค๋ฅธ ์ ์ ์ ํ์ ์ถ๋ ฅ ํ์ผ์ ๋ํ URL ์ JavaScript ๋ฒ๋ค์ ๋ด๋ณด๋ ๋๋ค. ์ด๋ก์จ ๊ทธ ํ์ผ๋ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ฝ๋์์ ๊ฐ๊ณ ์๊ฒ ๋ฉ๋๋ค.
// CSS ํ์ผ ์ํฌํธ
import './test.css'
// CSS modules๋ก CSS ํ์ผ ์ํฌํธ
import classNames from './test.css'
// ์ด๋ฏธ์ง ํ์ผ์ URL์ ์ํฌํธ
import imageURL from './test.png'
๋ง์ฝ ํ์ผ์ ์ฐธ์กฐ URL ์ด ์๋ ์ธ๋ผ์ธ์ผ๋ก JavaScript ๋ฒ๋ค์ ํฌํจ์ํค๊ณ ์ถ๋ค๋ฉด, Node.js ์ fs.readFileSync
API ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์ด ๋ URL ์ ์ ์ ์ผ๋ก ๋ถ์ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ์ด ๋ง์ธ ์ฆ, ๊ทธ ์์ ๋ณ์๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ๋ป์
๋๋ค. (๋จ, __dirname
์ __filename
๋ ์์ธ์
๋๋ค.)
import fs from 'fs'
// ๋ด์ฉ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ฝ์ต๋๋ค.
const string = fs.readFileSync(__dirname + '/test.txt', 'utf8')
// ๋ด์ฉ์ ๋ฒํผ๋ก ์ฝ์ต๋๋ค.
const buffer = fs.readFileSync(__dirname + '/test.png')
CSS
CSS ์ ์
์ JavaScript ๋ HTML ํ์ผ๋ก๋ถํฐ ์ํฌํธ ๋ ์ ์์ต๋๋ค. CSS ์ ์
์๋ @import
๊ตฌ๋ฌธ์ ํตํด ์ฐธ์กฐ๋๋ ์์กด์ฑ๊ณผ url()
ํจ์๋ฅผ ํตํด ์ฐธ์กฐ๋๋ ์ด๋ฏธ์ง, ํฐํธ๋ฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค. @import
๋ ๋ค๋ฅธ CSS ํ์ผ์ ๋์ผํ CSS ๋ฒ๋ค์ ์ธ๋ผ์ธ์ผ๋ก ํฌํจ๋ฉ๋๋ค. url()
์ฐธ์กฐ๋ ๊ทธ๊ฒ๋ค์ ์ถ๋ ฅ ํ์ผ ์ด๋ฆ์ผ๋ก ์ฌ์์ฑ ๋ฉ๋๋ค. ๋ชจ๋ ํ์ผ ์ด๋ฆ์ ํ์ฌ CSS ํ์ผ๊ณผ ๊ด๋ จ ์์ด์ผ ํฉ๋๋ค.
/* ๋ค๋ฅธ CSS ํ์ผ ์ํฌํธ */
@import './other.css';
.test {
/* ์ด๋ฏธ์ง ํ์ผ ์ฐธ์กฐ */
background: url('./images/background.png');
}
ํ๋ฒํ CSS ์ธ์ LESS, SASS, Stylus ๊ฐ์ ๋ค๋ฅธ ์ปดํ์ผ-ํฌ-CSS ์ธ์ด ์ญ์ ์ง์ํ๋ฉฐ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
SCSS
SCSS ๋ฅผ ์ปดํ์ผ ํ๊ธฐ ์ํด์๋ sass
๋ชจ๋์ด ํ์ํฉ๋๋ค. ๋ค์ ๋ช
๋ น์ด๋ก ์ค์นํด์ฃผ์ธ์.
npm install sass
sass
๋ฅผ ์ค์นํ๋ค๋ฉด ์ด์ SCSS ํ์ผ์ JavaScript ํ์ผ์์ import ํ ์ ์์ต๋๋ค.
import './custom.scss'
SCSS ์์ @import
๊ตฌ๋ฌธ์ผ๋ก ํฌํจ๋ ์์กด์ฑ๋ ์ฒ๋ฆฌ๋ฉ๋๋ค.
HTML
HTML ์ ์ ์ ์ฃผ๋ก Parcel ์ง์ ํ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ ์ง๋ง JavaScript ํ์ผ์ ์ํด์, ์๋ก ๋ค๋ฅธ ํ์ด์ง๋ก์ ๋งํฌ๋ฅผ ์ ๊ณตํ๊ธฐ์ํด ์ฐธ์กฐ ๋ ์๋ ์์ต๋๋ค. ์คํฌ๋ฆฝํธ, ์คํ์ผ, ๋ฏธ๋์ด, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ HTML ํ์ผ์ URL ์ ์์์ ์ค๋ช ํ๊ฒ ์ฒ๋ผ ์ถ์ถ๋๊ณ ์ปดํ์ผ๋ฉ๋๋ค. ์ฐธ์กฐ๋ HTML ์์์ ์ฌ์์ฑ ๋จ์ผ๋ก์จ ์ ํํ ์ถ๋ ฅ ํ์ผ๋ก ์ฐ๊ฒฐ ๋ฉ๋๋ค. ๋ชจ๋ ํ์ผ ์ด๋ฆ์ ํ์ฌ์ HTML ํ์ผ๊ณผ ๊ด๋ จ ์์ด์ผ ํฉ๋๋ค.
<html>
<body>
<!-- ์ด๋ฏธ์ง ํ์ผ ์ฐธ์กฐ -->
<img src="./images/header.png">
<a href="./other.html">๋ค๋ฅธ ํ์ด์ง๋ก ์ฐ๊ฒฐ</a>
<!-- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค ์ํฌํธ -->
<script src="./index.js"></script>
</body>
</html>
๋ฌธ์์ ๊ฐ์ ์ ๋์์ฃผ์ธ์
๋น ์ง์ ์ด ์๊ฑฐ๋ ๋ช ํํ์ง ์์ ๊ฒฝ์ฐ, ์น ์ฌ์ดํธ ์ ์ฅ์์ ์ด์๋ฅผ ์ ๊ธฐํด ์ฃผ์๊ฑฐ๋ ํ์ด์ง๋ฅผ ์์ ํด ์ฃผ์ธ์..