많은 파일들을 필요한 형태의 하나 또는 여러개의 번들파일로 만들어줍니다.
모듈 번들러를 사용해야하는 이유를 먼저 알아봅시다.
① 스코프에 신경 쓰지 않고 개발이 가능합니다.
// test1.js //test2.js
let value = 'a'; let value = 'b';
console.log(value); console.log(value);
② 라이브러리 종속 순서를 신경 쓰지 않아도 됩니다.
<script src="util-jquery.js" />
<script src="jquery.js" />
util-jquery.js
는 jquery를 사용하기 때문에, 로드 순서상jquer.js
가 나중에 호출되면 에러가 발생합니다.Webpack의 이해하기 위해서 Entry, Output, Loader, Plugins, mode를 학습해봅시다.
module.export={
entry: './src/indx.js'
//여러개의 entry 선언 방법
/*
entry: {
index: './src/index.js',
file: './src/file.js',
}
*/
};
./src/index.js
입니다.const path = require('path');
module.exports={
entry: './src/index.js',
output:{
path: path.resolve(__dirname, 'dist'),
filename: 'webpack-bundle.js',
}
};
./dist/main.js
입니다.const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'webpack-bundle.js',
},
module: {
rules:[
{
test: /\.(ts|tsx)$/,
use: 'babel-loader',
exclude: /node_modules/,
},
]
}
};
test
: 변환 할 파일을 지정합니다.(확장자)use
: 변환 할 파일에 지정할 로더를 설정합니다.const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'webpack-bundle.js',
},
module: {
rules:[
{
test: /\.(ts|tsx)$/,
use: 'babel-loader',
exclude: /node_modules/,
},
]
},
plugins:[
new HtmlWebpackPlugin({template: './src/index.html'}),
]
};
module.exports ={
mode: 'production' || 'development' || 'none'
}
① development
module.exports = {
devtool: 'eval',
plugins: [
new webpack.NamedModulesPlugin(),
new webpack.NamedChunksPlugin(),
new webpack.DefinePlugin({
"process.env.NODE_ENV": JSON.stringify("development")
}),
]
}
② production
module.exports = {
plugins: [
new UglifyJsPlugin(/* ... */),
new webpack.optimize.ModuleConcatenationPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
new webpack.DefinePlugin({
"process.env.NODE_ENV": JSON.stringify("production")
}),
]
}
③ none
module.exports = {
plugins:[]
}
웹팩 바벨에 대해서 공부해도 막연했는데 잘 공부하고 갑니다 감사해요!!