- webpack은 node.js에서 동작하는 환경이므로 CommonJS방식을 따름.
- 브라우저에서 동작하는 것은 ESM방식(일반 js)을 따라가고 node.js에서 동작하는 것은 CommonJS방식을 따라감.
- ESM에서의 import대신 require()함수로 js파일을 외부에서 가져옴.
- ESM에서의 export대신 module.exports 문법으로 내용들을 내보냄.
- module.exports 문법: 할당연산자로 객체데이터를 내보냄.
- 파일을 읽어들이기 시작하는 진입점 설정(어디서부터 읽어들이면 되는지,,), parcel-bunler에서 parcel index.html과 같이 진입점을 설정함.
- js파일을 진입점으로 설정가능.
- 결과물(번들)을 반환하는 설정
- 객체데이터로 내용추가
- 대표적인 옵션: path, filename, clean
- path: '절대경로 작성', 자동으로 dist폴더 생성
- filename: 'entry에 작성한 파일과 같은파일로 설정', 자동으로 filename에 지정한 파일이 dist폴더에 번들되어 생성됨.
- clean: true : 빌드시 path에 지정한 폴더에 전에 빌드한 파일이 삭제되고 filename에 지정한 파일이 새로 생성됨.
👾 #01
👉🏻 require('path'): node.js의 전역모듈
👉🏻 path: resolve(__dirname,'dist')
👉🏻 npm run build로 dist폴더에 번들된 main.js파일 확인 가능
- entry에 지정된 파일을 output으로 만들때 plugin에 명시된 여러가지 플러그인을 활용함.
- []배열로 데이터 할당
- 빌드된 파일(main.js)에 index.html을 삽입해서 개발서버로 오픈 가능케함.
- npm i -D html-webpack-plugin 패키지 설치
👉🏻 const HtmlPlugin = require('html-webpack-plugin') 할당
👉🏻 new HtmlPlugin({}) 으로 생성자로 생성, 인수로 객체데이터 전달
👉🏻 template: './index.html' 로 빌드된 파일에 삽입할 html파일 지정
👉🏻 npm run dev 로 서버 킴 -> devServer옵션으로 localhost지정
- 지정한 폴더의 파일들을 copy해서 dist폴더에 붙임.
- npm i -D copy-webpack-plugin 패키지 설치
👾 #02
const CopyPlugin = require('copy-webpack-plugin');
module.exports = {
// 번들링 후 결과물의 처리 방식 등 다양한 플러그인들을 설정
plugins: [
new CopyPlugin({
patterns: [
{ from: 'static' } // static 폴더명시
]
})
],
}
👉🏻 static폴더에 있는 파일들을 복사해 dist폴더에 붙임
html <link rel="stylesheet" href="./css/main.css">
작성 👾 #03
module.exports = {
module:{
rules:[
{
test: /\.css$/, // .css로 끝나는 확장자파일
use: [
'style-loader', // 해석된 css를 index.html애서 사용하기 위해 삽입함.
'css-loader', // js에서 css를 해석하는 용도의 패키지
]
}
]
},
}
👉🏻 'style-loader', 'css-loader'순서 중요함.
- main.js에 scss파일 import하기
- main.js에서 import '../scss/main.scss' 로 연결하면 됨, 하지만 webpack은 연결만되고 scss파일을 읽지 못하기 때문에 plugin설치 해야함.
- npm i -D scss-loader scss 두개의 패키지 설치
- 'scss-loader': webpack이 scss파일을 읽는 패키지
- 'scss': scss파일을 읽을때 문법을 해석해주는 패키지
👾 #03
module.exports = {
module:{
rules:[
{
test: /\.s?css$/, // .scss || .css로 끝나는 확장자파일
use: [
'style-loader',
'css-loader',
'scss-loader', // webpack이 scss파일을 읽는 패키지
]
}
]
},
}
👉🏻 'style-loader', 'css-loader', 'scss-loader' 순서 중요함.
- npm i -D postcss autoprefixer postcss-loader 세개의 패키지 설치
- postcss : style의 후처리를 도와주는 패키지
- autoprefixer: 공급업체 접두사 붙여주는 패키지
- postcss-loader: webpack에서 postcss를 동작하기위한 패키지
👾 #04
module.exports = {
module:{
rules:[
{
test: /\.s?css$/, // .scss || .css로 끝나는 확장자파일
use: [
'style-loader',
'css-loader',
'postcss-loader',
'scss-loader', // webpack이 scss파일을 읽는 패키지
]
}
]
},
}
👉🏻 순서 중요함.
👾 package.json - 추가
👾 .postcssrc.js 생성 후 추가
- npm i -D @babel/core @babel/preset-env @babel/plugin-transform-runtime 세개의 패키지 설치
- npm i -D babel-loader 추가 설치
👾 .babelrc.js - 추가
👾 #05
module.exports = {
module:{
rules:[
{
test: /\.js$/, // .js로 끝나는 확장자파일
use: [
'babel-loader'
]
},
]
},
}