npm패키지 매니저에서 node_modules 디렉토리에 설치된 패키지들의 의존성 트리를 기록하는 파일
npm을 사용해서 node_modules 트리나 package.json을 수정시 자동으로 생성되며, 생성 시점의 의존성 트리에 대한 정보를 가지고 있음. 따라서, pacakge.json의 버전 범위에 따라 버전이 바뀌더라도, package-lock.json 파일이 작성된 시점의 의존성 트리가 다시 생성될 수 있게 보장됨.
node_modules
package.json에 있는 모듈과, 그 모듈들이 의존하고 있는 모든 모듈들을 포함하고 있음.
npm에 새로운 모듈이 추가될 때, 자동으로 package.json과 node_modules에 추가되게 됨.
node_modules를 git에 commit하지 않아도, pacakge.json에 설치한 패키지의 정보가 모여있기 때문에, npm i 명령어로 node_modules를 언제든지 추가함.
ES Modules(ESM)
ES6에 도입된 모듈 시스템
import, export를 사용해 분리된 자바스크립트 파일끼리 서로 접근할 수 있음.
CommonJs(CJS)
nodeJs에서 사용하는 표준 모듈 명세
require, module.exports를 사용
TypeScript 세팅
npm i -D typescript
npx tsc --init
npx(node pack) : 모듈을 로컬에 저장하지 않고, 매번 최신 버전의 파일만을 임시로 불러와 실행 시킨 후에, 다시 그 파일은 없어지는 방식
//tsconfig.json
// ...(전략)...
"jsx": "react-jsx", /* Specify what JSX code is generated. */
...
"types": ["node", "jest", "@testing-library/jest-dom"], /* Specify type package names to be included without being referenced in a source file. */
// ...(후략)...
TypeScript 컴파일을 통해 문법오류를 확인할수 있는 check 명령을 package.json에 추가
ESLint 세팅
ESLint는 코딩 컨벤션에 위배되는 코드나 안티 패턴을 자동 검출하는 도구
npm i -D eslint
npx eslint --init
? How would you like to use ESLint? …
❯ To check syntax, find problems, and enforce code style
? What type of modules does your project use? …
❯ JavaScript modules (import/export)
? Which framework does your project use? …
❯ React
? Does your project use TypeScript?
› Yes
? Where does your code run? …
✔ Browser
? How would you like to define a style for your project? …
❯ Use a popular style guide
? Which style guide do you want to follow? …
❯ XO: https://github.com/xojs/eslint-config-xo-typescript
? What format do you want your config file to be in? …
❯ JavaScript
? Would you like to install them now with npm?
› Yes
? Which package manager do you want to use?
> npm