Webpack
Webpack 은 Module Bundler
이다.
Module ?
모듈은 구현 세부사항을 캡슐화하고 공개 API를 노출해 다른 코드에서 쉽게 로드하고 사용할 수 있도록 재사용 가능한 코드조각이다.
Bundler ?
Bundle
: 소프트웨어 및 일부 하드웨어와 함께 작동하는데 필요한 모든것을 포함하는 패키지.Bundler
란 필요한 의존성에 대해 정확히 추적해 해당하는 의존성들을 그룹핑 해주는 도구이다.
- 모듈번들러는 빌드타임에 실행되며 번들파일을 생성한다 (예: bundle.js)
- 생성된 번들파일을 브라우저에서 로드한다.
웹팩(Webpack) 의 장점
- 모듈 번들러의 기능을 커스터마이징해서 사용 가능
- third-party library에 대해 모듈로 통합하는 기능 제공
webpack config
webpack.config.js
파일을 통해 webpack을 설정할 수 있다.
작업하려는 프로젝트의 가장 상위 폴더에 webpack.config.js
파일을 생성한다.
- Entry
- Output
- Module
- Plugins
entry
entry
프로퍼티는 번들링하고싶은 파일들을 선언해주는 역할이며key : value
방식으로 선언할 경우 key
값이 파일 이름이 되고, value
값이 번들링하고싶은 파일이 된다.
// webpack.config.jsmoduleexports =entry:bundle: './src/index.js'
output
output
프로퍼티는 번들링되고 만들어지느 파일에 대한 정보를 명시해준다output.filename
프로퍼티는 번들링된 파일의 이름을 명시해준다output.path
프로퍼티는 먼들링된 파일의 위치를 명시해준다
moduleexports =// entry: './src/index.js' 라고해도 무방// ./ 의미 : 현재폴더entry:bundle: './src/index.js'output:// entry에 bundle 프로퍼티를통해 이름을 명시했어도// filename: 'bundlebundle.js' 라고 명시하면// bundlebundle.js 라는 파일로 생성됨filename: '[name].js'path: path// __dirname : 현재실행중인 자바스크립트가 있는 폴더
module
module
프로퍼티는 프로젝트 내의 여러 유형의 모듈들을 처리할 방법을 결정module.rules
: 모듈이 생성 될 때 요청과 일치하는 규칙 의 배열module.rules.test
: loader를 적용시킬 파일들을 정규식으로 명시module.rules.loader
: 사용할 loader 명시
사용할 loader가 많을 경우엔 Rule.use:[ { loader }] 로 사용가능
Rule.loaders 는 Rule.use로 사용
Rule.loader: ['loader'] 처럼 배열로도 사용가능
module.rules.exclude
: loader가 실행될 때 배제시킬 파일들을 명시module.rules.query
: loader는 query
를 통해 매개변수 전달가능
moduleexports =entry:bundle: './src/index.js'output:filename: '[name].js'path: pathmodule:rules:test: /\.js$/loader: 'babel-loader'query:presets: 'es2015'test: /\.css$//*loader: ['style-loader', 'css-loader'] 동일표현use: [{ 동일표현loader: 'style-loader'},{loader: 'css-loader'}]*/loaders: // 동일표현loader: 'style-loader'loader: 'css-loader'
로더는 여러 로더를 전달하여 연결될 수 있는데 오른쪽에서 왼쪽으로 적용된다는점이 주의사항이다. 위의 코드에서는
첫번째로 적용되는것이 css-loader
두번째로 적용되는것이 style-loader
css-loader
로 css파일들을 읽은 뒤style-loader
를 통해 css파일들을 style 태그로 만들어 head 태그 안에 넣어준다.
webpack-dev-server
임시 개발서버를 띄워 코드를 수정할 때마다 reloading 되는 툴을 제공한다.
2.11.0 버전기준으로 한다
$ npm install -g webpack-dev-server@2.11.0
$ npm install --save-dev webpack-dev-server@2.11.0
설치가 됐다면 webpack.config.js
파일 내에
moduleexports =... // 생략devServer:contentBase: pathcompress: true
contentBase
속성에는 콘텐츠를 제공할 파일을 서버에 알려주는 역할이다
필자는 build 폴더 내에 index.html이 존재하므로 build
폴더를 명시했다compress
속성은 코드들을 압축해서 뿌려주는것같다. 자세한 내용은 Webpack dev server 참고
이후에 커맨드라인에
$ webpack-dev-server
를 입력한다면 컴파일 성공이 뜬다. 이후에 웹 브라우저의 주소에 localhost:8080
을 입력하면
index.html이 보여진다.
또한 css, javascript, html 등을 변경을하면 변경된 파일로 reloading해서 보여준다. 개발시에 상당히 편리하다.
webpack-dev-server@2.11.0?
sudo npm install --save-dev webpack@2.11.0
컨트롤 씨 누르면 dev-server 종료
참고문서
http://haviyj.tistory.com/17
https://goo.gl/jW4JaJ
https://hjlog.me/post/118
https://webpack.js.org/concepts/
'복습 > Webpack' 카테고리의 다른 글
[Webpack] 웹팩 튜토리얼 (0) | 2018.12.24 |
---|---|
[Webpack] 알아두면 쓸데있는 웹팩지식 (0) | 2018.03.08 |
[Webpack] css-loader & style-loader (0) | 2018.03.07 |
[Webpack] extract-text-webpack-plugin (0) | 2018.03.06 |
[Webpack] Babel (0) | 2018.03.06 |