๐ ์ ์ ์ ํ
์ ์
๋ฌธ์์ ๊ธฐ์ ํ๋ ๊ฒ์ฒ๋ผ, Parcel ์ ๊ฐ ์
๋ ฅ ํ์ผ์ Asset
์ด๋ผ๊ณ ํํํฉ๋๋ค. ์ ์
์ ํ(type)์ ๊ธฐ๋ณธ Asset
ํด๋์ค๋ฅผ ์์ํ ํด๋์ค๋ก ํํ๋ฉ๋๋ค. ์ ์
์ ํ์ ๊ตฌ๋ฌธ ๋ถ์(parse), ์ข
์์ฑ ๋ถ์, ๋ณํ๊ณผ ์ฝ๋ ์์ฑ์ ํ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค.
Parcel ์ ๋ค์ค ํ๋ก์ธ์ ์ฝ์ด๋ก ์ ์ ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ ํ๊ธฐ ๋๋ฌธ์ ์ ์ ์ ํ์ด ์ํํ ์ ์๋ ๋ณํ์ ํ๋ฒ์ ํ๋์ ํ์ผ ์ด์ฉ๋ง์ผ๋ก ํ์ ๋์ด ์์ต๋๋ค. ์ฌ๋ฌ ํ์ผ ๋ณํ์ ์ํด ์ฌ์ฉ์ ์ ์ ํจํค์ ๋ฅผ ์ธ ์ ์์ต๋๋ค.
์ ์ ์ธํฐํ์ด์ค
const { Asset } = require('parcel-bundler')
class MyAsset extends Asset {
type = 'foo' // ์ฃผ ์ถ๋ ฅ ์ ํ ์ค์
async parse(code) {
// AST์ ์ฝ๋ ๊ตฌ๋ฌธ ๋ถ์
return ast
}
async pretransform() {
// ์ต์
. ์์กด์ฑ ์์ง ์ด์ ์ ๋ณํ.
}
collectDependencies() {
// ์์กด์ฑ ๋ถ์.
this.addDependency('my-dep')
}
async transform() {
// ์ต์
. ์์กด์ฑ ์์ง ์ด์ ์ ๋ณํ.
}
async generate() {
// ์ฝ๋ ์์ฑ. ํ์ํ๋ค๋ฉด ๋ค์์ ํํ(rendition)์ ๋ฐํํ ์ ์์.
// ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ ํ ํจํค์ ๋ก ์ ๋ฌ๋์ด ์ต์ข
๋ฒ๋ค์ ์์ฑ.
return [
{
type: 'foo',
value: 'my stuff here' // ๋ฉ์ธ ์ถ๋ ฅ
},
{
type: 'js',
value: 'some javascript', // ํ์ํ๋ค๋ฉด JS ๋ฒ๋ค์ ๋ฐฐ์นํ ๋์ฒด ํํ(rendition)
sourceMap
}
]
}
async postProcess(generated) {
// ๋ชจ๋ ์ฝ๋ ์์ฑ์ด ์๋ฃ๋ ๋ค ์คํ๋ ์์
// ์ฌ๋ฌ ์ ์
ํ์
์ ํฉ์น๋ ๋ฑ์ ์ฌ์ฉ ๊ฐ๋ฅ
}
}
์ ์ ์ ํ ๋ฑ๋กํ๊ธฐ
addAssetType
๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ ์
์ ํ์ ๋ฒ๋ค๋ฌ์ ๋ฑ๋กํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ฑ๋กํ ํ์ผ ํ์ฅ์์ ์ ์
์ ํ ๋ชจ๋์ ๊ฒฝ๋ก๋ฅผ ๋ฐ์๋ค์
๋๋ค. ์ค์ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ๋ก์ด๊ธฐ ๋๋ฌธ์ ์์ปค ํ๋ก์ธ์ค๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค.
const Bundler = require('parcel-bundler')
let bundler = new Bundler('input.js')
bundler.addAssetType('.ext', require.resolve('./MyAsset'))
๋ฌธ์์ ๊ฐ์ ์ ๋์์ฃผ์ธ์
๋น ์ง์ ์ด ์๊ฑฐ๋ ๋ช ํํ์ง ์์ ๊ฒฝ์ฐ, ์น ์ฌ์ดํธ ์ ์ฅ์์ ์ด์๋ฅผ ์ ๊ธฐํด ์ฃผ์๊ฑฐ๋ ํ์ด์ง๋ฅผ ์์ ํด ์ฃผ์ธ์..