Written by
Poogle
on
on
Typescript, Nodejs tips
JavaScript(ES6)와 TypeScript
- 2015년 ECMAScript6 개정판 (ES2015)
- TypeScript 기반이 되는 클래스 문법과 모듈 기능 추가
- TS 컴파일 시 -> JS (트랜스 파일: 해당 언어와 비슷하거나 좀 더 추상화된 언어로 바뀌는 것)
ES6 특징
- Class문법 제공(Constructor, extends)
let
,const
추가var
의 문제점- 변수 중복 선언 가능하여 예기치 못한 값 반환 가능
- 함수 레벨 스코프로 인해 함수 외부에서 선언한 변수는 모두 전역 변수
- 변수 선언문 이전에 변수를 참조하면 언제나 undefined
var | const | let |
* 선언과 초기화가 동시에 진행, 암묵적으로 undefined 할당해서 초기화 | * 재선언, 재할당 불가능(원시값 불가능, 객체 가능) | * 변수 중복 선언이 불가하지만 재할당은 가능 |
* 선언과 초기화를 동시에 진행 | * 선언 단계와 초기화 단계가 분리되어 진행(스코프 시작~초기화 시작 전까지 변수 참조할 수 없음) |
let
,const
로 선언한 변수는 모두 코드 블록을 지역 스코프로 인정하는 블록 레벨 스코프를 따름- 변수의 스코프는 최대한 좁게 만들기 권장 ->
var
보다는let
과const
, 상수라면const
사용 - 호이스팅이 사라진 것 같은 효과
- 함수 단위 스코프에서 블록 단위 스코프로 변경
참고:
Moment.js
Library
- 날짜와 시간에 관련된 데이터의 파싱, 검증, 조작 등
참고: https://momentjs.com/docs/
사용
npm install moment
//ES6
import * as moment from 'moment';
import moment from 'moment';
moment().format();
//TypeScript
import moment = require('moment');
let now = moment().format('YYYY-MM-DD');
주요 메서드
const now = moment();
const nowFormat = moment().format('YYYY-MM-DD');
moment().add(7, 'days').format()
moment().add({days:7, month:1}).format()
const a = moment([2022, 6, 5]);
const b = moment([2022, 5, 5]);
const diffDays = a.diff(b, 'days');
const diffMonths = a.diff(b, 'months');
Moment-timezone.js
Library
- timezone 사용 가능
참고: https://momentjs.com/timezone/docs/#/zone-object/parse/
사용
npm install moment-timezone
import moment from "moment-timezone";
moment().tz("Asia/Seoul").format("YYYY-MM-DD");
moment().tz("Asia/Seoul").utc().format("YYYY-MM-DD"); // UTC 시간 출력
node-schedule
- 스케쥴러 모듈
사용
npm install node-schedule
import schedule = require('node-schedule')
//import * as schedule from 'node-schedule'
const rule = new schedule.RecurrenceRule();
rule.tz = 'Asia/Seoul'
rule.dayOfWeek = [0, new schedule.Range(0, 6)]; //0: SUN ~ 6: SAT
rule.dayOfWeek = [0, new schedule.Range(1, 5)]; //MON-FRI
rule.hour = 12
rule.minute = 0
//스케쥴러 실행 시
nodeschedule.scheduleJob(rule, function(){
// 수행할 작업
});
Recurrence Rule(재귀식 규칙 설정)
- second (0-59)
- minute (0-59)
- hour (0-23)
- date (1-31)
- month (0-11)
- year
- dayOfWeek (0-6) Starting with Sunday
- tz
패키지 매니저
npm
- node package manager
- 자바스크립트 프로그래밍을 위한 패키지 관리자
- 자바스크립트 런타임 환경 node.js의 기본 패키지 관리자
yarn
- 다운로드한 패키지 캐시
- 운영 병렬화 리소스 활용 극대화로 설치 시간 단축
- 코드 실행전 설치된 패키지 무결성 확인
- 이전에 패키지 설치한 경우 오프라인으로 재설치
명령어
npm | yarn | 설명 |
npm init |
yarn init |
시작 및 초기화 |
npm install |
yarn or yarn install |
package.json |
npm install --save [package name] |
yarn add [package name] |
의존성 추가 |
npm install --global [package name] |
yarn global add [package name] |
전역으로 추가 |
npm start |
yarn start |
실행 |
npm uninstall --save [package name] |
yarn remove [package name] |
패키지 삭제 |
npm cache clean |
yarn cache clean |
캐시 삭제 |
참고
패키지 잠금 파일
- 프로젝트 메타 정보는
package.json
파일로 관리 - 설치가 필요한 패키지들이
dependecies
,devDependencies
에 등록되어 있음 npm
ornpm install
/yarn
oryarn install
명령어를 통해package.json
에 등록된 패키지가 npm registry로부터 다운받아져서node-modules
디렉터리에 저장됨node-modules
는package.json
있으면 자동으로 만들어지기 때문에.gitignore
파일에 추가- 그치만 개발자마다 패키지를 설치하는 버전이 다를 수 있음(
package.json
파일에 등록된 버전이^
이나~
등으로 범위가 달라지는 경우가 많기 때문) - 따라서 패키지 잠금 파일이 존재함
- 한 번
package-lock.json
파일이 생성되면 그 이후로는 npm registry에 등록된 최신 버전을 설치하지 않음, 대신 항상package-lock.json
파일에 명시되어 있는 버전으로 패키지를 설치해줌 - 즉
package.json
과package-lock.json
은 git 관리 대상 파일, 패키지 잠금 파일은 직접 갱신/제거하면 안됨 - npm
package-lock.json
- yarn
yarn.lock
참고