[온라인강의] NPM Package

Wendy·2021년 8월 9일
0

IT도서 / 강의 리뷰

목록 보기
5/6

(강좌) 생활코딩 - NPM Package

1. 개요

강의 선정 이유

패키지를 설치하는데 두려움이 있고,
npm을 이해없이 사용하고있다고 느껴졌다.
환경설정 지식들에 대한 부족함이 느껴졌다.

공부 방법

  1. 강의를 보고 + 따라하기
  2. 중간중간 궁금한내용 찾아보기 + 실험해보기
  3. 회사에서 사용중인 부분 확인하기

소감

npm, package.json을 이해없이 그때그때 구글링해서 썼었는데
이번 강의를 통해 잘 이해할수있었다.
중요한 내용을 쉽게!! 길지않게!! 무료로!! 배울수있어서 너무 좋았고
강사님이 복 많이 받으셨으면 좋겠다.

2. 강의 메모

1) 패키지 생성

  1. 폴더생성

  2. 패키지 설정
    npm init : 난 이제 패키지를 만들거야~
    npm init -y : 일단 기본설정으로 만들거야~

  3. 파일 작성
    entrypoint 파일에 module.exports=

  4. npm publish (처음에는 --access=public)
    회원가입 안했으면 authentification error
    최초에 회원가입 후 이메일 인증 안했어도 403 error
    기존에 올린것과 같은 버전 또 올리면 403 error
    private버전은 월 7달러

한번 올린 버전은 수정/삭제 불가?

npm의 registry data는 immutable이므로 수정이 불가능하다.
수정된 내용이 있다면, 버전을 올릴것을 권장하고있다.
(사용자들이 무엇인가 변경되었음을 알수있도록)

버전을 올린뒤, 과거 버전에 deprecate 표기를 해줄수도 있다.
그것도 싫으면 해당버전을 삭제(unplublish)히면 된다.

삭제는 몇가지 기준에 의해 가능하고,
삭제해도 해당 패키지명/버전은 다시 쓸수없으며,
삭제보다는 deprecate를 할 것을 권장하고있다.

삭제정책 : https://docs.npmjs.com/policies/unpublish

중간에 모듈명 변경 가능?

이미 publish한 모듈은 이름도 마찬가지로 수정이 불가능하다.
deprecate로 새 모듈을 받을것을 안내해야한다

npm publish --access=public 꼭 써야해?

https://docs.npmjs.com/about-scopes
스코프가 없으면 public, 있으면 private이 기본값.
스코프를 사용하면서 public으로 올리려고 했기때문에 --access=public으로 이를 알린것

package.json

// 일부만
{
  "name": "@스코프명/패키지명", //init할때 썼던 package name
  "version": 0.0.1,
  "main": "./lib/index.js", //init할때 썼던 entry point
  "bin": {  //cmd명령어
    명령어: 실행파일 // 예 - "i18next-scanner": "./bin/cli.js"
  }
}

@가 스코프를 나타내는 기호? 범용적으로 그런 의미?

범용적이라기보다 npm에서 사용하는 약속임

@를 사용함으로써

  1. 어떤 단체(namescope)의 공식적 패키지라는걸 알릴수있고
  2. 다른 단체에서 선점하고 있는 같은 이름을 또 사용할수도 있음
    (http가 이미 있어도 @wendy/http 를 또 생성 가능)

참고 : https://docs.npmjs.com/cli/v6/using-npm/scope

namescope에 본인 id말고 다른거 써도 돼?

https://docs.npmjs.com/about-scopes
사용자의 id이거나, 기관으로 등록한 id만 사용 가능하다.
(마구잡이로 하면 아무나 다 저장할수있으니까...)

버전

Semantic Versioning (유의적 버전)은 npm전용?

No. Semantic version은 버전 번호를 관리하기 위한 규칙이며, npm에서 이것을 따르는것

https://semver.org/lang/ko/
기존 버전과 호환되지 않게 API가 바뀌면 “주(主, major) 버전”을 올리고,
기존 버전과 호환되면서 새로운 기능을 추가할 때는 “부(部, minor) 버전”을 올리고,
기존 버전과 호환되면서 버그를 수정한 것이라면 “수(修, patch) 버전”을 올린다.

틸트(~)는 같은 마이너에서 패치 업데이트
캐럿(^)은 같은 메이저에서 마이너, 패치 업데이트

버전을 낮춰서 publish는 불가능해?

과거에 등록한 적 없는 버전이면 숫자가 낮아지는것은 상관없다.
1) 0.0.1 등록 >> 성공
2) 0.0.3 등록 >> 성공
3) 0.0.1 등록 >> 실패, 403 error
4) 0.0.2 등록 >> 성공

위의 패키지를 내려받는다면, 가장 최신버전은 0.0.2이다

2) 명령형 프로그램 만들기

파라미터 전달받기

process.argv : 내가 콘솔에 입력한 배열
node cli.js ko라고 입력해 cli.js를 샐행하면
[ nodejs경로, cli.js경로, "ko"]를 받을수있다

파일 권한

ls -al 로 파일 권한 확인
rwx: read write execute
chmod +ux <파일명> 으로 실행권한 넣어주기

node로 실행하기

js파일 상단에 #!/usr/bin/env node 쓰면
실행하는 운영체제에게 nodejs 파일임을 알려줄수 있다

3) 명령형 프로그램 실행하기

  1. 로컬 패키지 설치 후 실행
  2. 전역 패키지 설치 후 실행
  3. 설치없이 npx

npx

  1. 명령어
    패키지명과 명령어가 같은경우 : npx <패키지>
    패키지명과 명령어가 다른경우 : npx -p <패키지> <명령어>

  2. 다운받는 흔적을 남기지 않고 실행할수 있다
    대신 사용할때마다 다운을 받았다 지우므로 느리다

  3. 만약 로컬, 전역에 다운로드 파일이 있으면 찾아서 실행한다
    우선순위 : 로컬 > 전역 > 임시 다운로드

  4. 로컬 명령 시 node_modules/.bin/... 다 쓰기 너무 긴데
    npx로 심플하게 쓸수있어서 좋다

만약 로컬버전이 outdated인데, npx로 호출하면?

(최신버전이 아니지만) 로컬 프로그램 실행

3. 여러가지 생각

프로젝트 생성 방법?

  1. 폴더 만들고 하나하나 파일 만들기
    하지만 외부 모듈 설치 하나도 없이 프로그램을 만드는게 현실적으로 어렵지않을까

  2. 폴더만들고 npm 패키지 생성 후 웹팩/바벨/eslint 등등 기본셋팅

  3. 폴더만들고 CRA 같은 패키지로 기본셋팅

npm 명령어에서 어떤건 run 이 붙고 어떤건 안붙는데?

npm 기본 명령어(콘솔에서 npm치면 나옴)인경우 <npm + 명령어>
커스텀(package.json-script에서 정의한) 명령어는 <npm run + 명령어>
커스텀 명령어지만 npm기본 명령어에 있는(덮어씌운)거라면 <npm + 명령어>

나머지 추가학습은 2탄으로...

4. 기타

NPM 명령어

. npm init
. npm init -y (기본값으로 자동생성)
. npm [-g][-D] install <패키지> (-g: 전역, -D: 개발용)
. npm uninstall <패키지>
. npm view <패키지> versions 전체 버전목록
. npm login
. npm publish --access [public/private]
. npm version [patch/minor/major]
. npm deprecate <패키지>@<버전> "<메세지>"
. npm outdated
. npm update

. npx <패키지>
. npx -p <패키지> <명령어>

profile
개발 공부중!

0개의 댓글