김정환 님의 견고한 JS 소프트웨어 만들기를 듣고 정리한 게시물입니다.
https://www.inflearn.com/course/tdd-견고한-소프트웨어-만들기
webpack is a static module bundler for modern JavaScript applications.
- 여러개의 모듈들을 bundle화해준다. (= 여러 개의 javascript파일들을 1개의 javascript 파일로 만들어준다.)
- bundle화 해주기 때문에 bundler라 불린다.
// 일반 함수 사용시 - 전역 스코프 오염가능성 있음(window.sum() 으로 호출 가능)
function sum(a,b) {
return a+b;
}
sum(1,2)
// IIFE 방식
var math = math || {};
(function() {
function sum(a,b) {
return a+b;
}
math.sum = sum;
})();
math.sum(1,2)
: IIFE방식의 모듈화 이외에도 CommonJS, AMD, UMD 와 같은 모듈시스템 을 사용하여 파일별로 모듈을 관리할 수 있다.
- node.js 에서 사용하는 방식
// math.js
exports function sum(a,b) { return a+b;}
// app.js
const sum = require('./math.js');
sum(1,2)
- 브라우져 환경에서 사용되는 스펙(외부에서 js를 로딩하는 경우 == 비동기로 로딩되는 환경)
- CommonJS + AMD
- ES2015에서 발표
- babel + webpack
// math.js
export function sum(a,b) { return a+b;}
// app.js
import * as math from './math.js'
math.sum(1,2);
- 크롬에서는 다음과 같이 type에 선언하여 module을 사용할 수 있다.
// CORS 이슈가 생기므로 lite-server로 실행테스트
<script type="module" src="./app.js"></script>
하지만 모든브라우저에서 다음과 같은 스타일의 모듈시스템을 지원하지는 않는다.
ex) IE 미지원 🙄🙄🙄
Q. 모든 브라우저에서 module방식을 사용하고 싶다면?
A. 웹팩을 사용하자!
위에서 모듈테스트해본 app.js, math.js 로 웹팩의 번들링을 체험해보자!
// index.html
<!DOCTYPE html>
<html>
<head>
<script type="module" src="./src/app.js"></script>
</head>
<body></body>
</html>
// src/math.js
export function sum(a,b) { return a+b;}
// src/app.js
import * as math from './math.js'
const result = math.sum(1,2);
console.log(result);
npm init
npm install -D webpack@4 webpack-cli
webpack.config.js
const path = require('path');
module.exports = {
mode: 'development',
entry: {
main: './src/app.js'
},
output: {
path: path.resolve('./dist'),
filename: '[name].js'
}
}
package.json
"scripts": {
...,
"build": "webpack"
},
node_modules/.bin/webpack --help
webpack 설정을 볼 수 있는 명령어인데 해당 명령어를 입력하면 default 설정파일을 webpack.config.js 로 인식하고 있다는 것을 알 수 있다.
-c, --config <value...> Provide path to a webpack configuration file e.g. ./webpack.config.js.
npm run build
index.html
<!DOCTYPE html>
<html>
<head>
<!-- module 사용 -->
<!-- <script type="module" src="./src/app.js"></script> -->
<script src="./dist/main.js"></script>
</head>
<body></body>
</html>
CORS 이슈가 발생하므로 lite-server 를 사용하여 테스트를 하자.
명령어: npx lite-server