npm init을 하면 package.json이 만들어짐방법1. CDN(Contents Delivery Network, 컨텐츠 전송 네트워크) 이용하기
방법2. 직접 다운로드
방법3. NPM을 이용
^16.12.0
유의적버전(Sementic Version): 버전 번호를 관리하기 위한 규칙
- 주 버전(Major Version): 기존 버전과 호환되지 않게 변경한 경우
버전의 범위
- 특정 버전을 사용: 1.2.3
>1.2.3, >=1.2.3, <1.2.3, <=1.2.3~1.2.3, ^1.2.3!!! 과거에는 node.js가 틸트(~)로 버전관리를 했는데 캐럿(^)으로 변경하였음
WHY?
보통 라이브러리 정식 릴리즈 전에는 패키지 버전이 수시로 변경됨. 0.1에서 0.2로 부버전이 변하더라도 하위 호환성을 지키지 않고 배포하는 경우가 빈번했음.
Before: ~0으로 버전 범위를 표기하면 하위호환성을 지키지 못하는 0.2로 업데이트 되어버리는 문제 발생가능.
After: ^0.0으로 표기한다면 0.0.0 ~ 0.1.0 미만 내에서만 버전을 사용하도록 제한하여, 하위호환성을 유지할 수 있음.
npx는 노드 패키지를 실행하는 명령어package.json의 scripts에 정의하고 npm run {script} 형태로 사용할 수 있음. run script에 추가하거나 npx를 이용해야 함.스코프를 사용함. 함수 스코프를 만들어 외부에서 안으로 접근하지 못하도록 막음.(function () {
statements
})();
IIFE 방식으로 JS 모듈을 구현하는 대표적인 명세: AMD, CommonJS
- AMD: Asynchronous Definition
: 브라우저처럼 외부에서 JS를 로딩해야 하는 곳(비동기로 로딩되는 환경)에서 사용
ES2015에서 표준 모듈 시스템 출시
=> 이후로 babel과 webpack을 이용해 표준모듈시스템을 사용하는 것이 일반적임
IE를 포함한 몇 브라우저에서는 모듈을 사용 못함.
크롬에서는 버전 61부터 모듈 시스템을 지원함.
BUT 브라우저에 무관하게 모듈을 사용하고 싶을 때, webpack 나오게 됨
// index.html
<script type="module" src="src/app.js"></script>
번들이라고 부름. 그래서 웹팩을 번들러라고 부름.webpack config 파일에서 쓰는 modules.exports는 node의 module임
mode: propduction || developementsentry: 엔트리포인트 = 시작점output: entry를 찾아서 모든 JS를 하나로 만든 다음에 내보내는 곳path: path는 절대경로를 계산해주는 resolve를 씀// webpack.config.js
// ...
module: {
rules: [
{
// 로더가 처리해야 할 파일들의 패턴(정규표현식)
test: /\.js$/,
// 사용할 로더를 명시함
use: [
path.resolve('./my-webpack-loader.js')
]
}
]
}
use 안에서 로더가 사용되는 순서는 뒤 => 앞 // webpack.config.js
// ...
use: [
'style-loader',
'css-loader'
]
{
test: /\.png$/,
loader: 'file-loader',
options: {
publicPath: './dist/',
// file-loader가 파일을 output에 복사할 때 쓰는 이름
// 캐쉬 무력화를 위해 매번 달라진 hash값을 쿼리스트링으로 붙여줌
name: '[name].[ext]?[hash]'
},
{
test: /\.(png|jpg|jpeg|gif|svg)$/,
loader: 'url-loader',
options: {
publicPath: './dist/',
name: '[name].[ext]?[hash]',
// 20kb 미만의 파일은 js 문자열로 변환하고 그 이상은 file-loader가 실행함
limit: 20000, //20kb
},
}