Webpack Concept - ChoDragon9/posts GitHub Wiki
์นํฉ ์ปจ์
์์ฝ
- Entry : ์นํฉ ๋น๋ ์์์
- Output : ์นํฉ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ ๋ง๋ค์ด์ง๋ ๊ณณ
- Loaders : import๋ฅผ ํตํด ์ฝ์ ํ์ผ์ ์ปดํ์ผํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
- Plugins : ์ฝ๋ ์ต์ ํ๋ฅผ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
Entry
- entry point๋ ์นํฉ ๋น๋์ ์์์ ์ด๋ค.
- ๋ชจ๋๊ณผ ์์กด์ฑ์ด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๊ณ์ฐํด ๋ด๋ถ์ ์ธ ์ข
์์ฑ ๊ทธ๋ํ๋ฅผ ๋ง๋ ๋ค
- String์ผ๋ก ๋จ์ผ ํ์ผ์ Entry๋ก ์ง์ ํ ์ ์๊ณ , Array / Object Literal๋ฅผ ํตํด 2๊ฐ ์ด์์ Entry ๋ฅผ ๋ง๋ค์ ์๋ค.
Output
- ์นํฉ ๋น๋์ ๊ฒฐ๊ณผ๋ฌผ์ ์ง์ ํ๋ค.
- ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ผ๋ช
์ ์ง์ ํ๋ค.
Loaders
- webpack.config.js์ ์์ฑํ ๋
module
์ด๋ผ๋ ํ๋กํผํฐ๋ช
์ ์ฌ์ฉํ๋ค.
- ๋ก๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด์ธ ๋ค๋ฅธ ํ์ผ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์ฃผ๋ ์ญํ ์ ํ๋ค.
- import์ ๊ธฐ๋ณธ ํ์ฅ์๋
.js
๋ก ๋ก๋๋ฅผ ์ถ๊ฐ์์ด ์ฌ์ฉ๊ฐ๋ฅํ์ง๋ง ES Feature๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ก๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
- ๋ก๋๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์นํฉ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค
module.exports = {
entry: './entry.js',
output: {
path: './dist',
filename: 'bundle.js'
},
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
}
}
- rules[].test ๋ ๋ณํ๋ ํ์ผ๋ค์ ์ฐพ๋๋ค.
- rules[].use ๋ ๋ณํ์ ์ํด ์ฌ์ฉํ ๋ก๋๋ฅผ ์ค์ ํ๋ค.
- ์ ์ค์ ์ ์ด๋ ๊ฒ ํด์ํ ์ ์๋ค.
import๋ก .txtํ์ผ์ ์ฌ์ฉํ ๊ฒฝ์ฐ raw-loader๋ฅผ ์ฌ์ฉํด์ ๋ณํํ๋ผ
Plugins
- ๋ก๋๋ณด๋ค ๊ด๋ฒ์ํ ์ญํ ์ ํ๋ค.
- ์ฑ๋ฅ ์ต์ ํ์ ์ฝ๋ ์ต์ํ ์์
์ ํ ์ ์๋ค.
- webpack.config.js ํ์ผ์ require()๋ฅผ ํตํด ์ฝ์ด์จ ๋ค new operator๋ฅผ ํตํด ์ ์ํด์ ์ฌ์ฉํ๋ค.
const webpack = require('webpack')
module.exports = {
..., //entry, output, module
plugins: [
new webpack.optimize.UglifyJsPlugin()
]
}
Resolve
- ๋ชจ๋(
import
, require
)์ด ์ด๋ป๊ฒ ํด์๋๋ ์ง๋ฅผ ์ค์
- ์์ฃผ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์
alias
๋ก ์๋๊ฒฝ๋ก๋ฅผ ์ ๋๊ฒฝ๋ก๋ก ์ฌ์ฉํ์ฌ ๊ธฐ์ ํ ์ ์๋ค.
module.exports = {
//...
resolve: {
alias: {
Utilities: path.resolve(__dirname, 'src/utilities/'),
Templates: path.resolve(__dirname, 'src/templates/')
}
}
};
import Utility from '../../utilities/utility';