본문 바로가기

개발/Node.JS

npm - npm모범 사례

npm 모범 사례

npm installnpm cli를 사용하는 가장 일반적인 방법입니다 -하지만 훨씬 더 많이 제공 할 수 있습니다! 이 장의 Scale 에있는 Node.js 에서는 npm이 새 프로젝트 시작에서 개발 및 배포에 이르기까지 응용 프로그램의 전체 라이프 사이클 동안 어떻게 도움이되는지 배우게됩니다.

# npm

토픽에 들어가기 전에, 실행중인 npm의 버전이나 사용 가능한 명령을 알려주는 몇 가지 명령을 살펴 보겠습니다.

npm 버전

현재 사용중인 npm cli 버전을 얻으려면 다음을 수행 할 수 있습니다.

$ npm --version
2.13.2

npm은 현재 패키지의 버전, 사용중인 Node.js 버전 및 OpenSSL 또는 V8 버전을 반환 할 수 있습니다.

$ npm version
{ bleak: '1.0.4',
  npm: '2.15.0',
  ares: '1.10.1-DEV',
  http_parser: '2.5.2',
  icu: '56.1',
  modules: '46',
  node: '4.4.2',
  openssl: '1.0.2g',
  uv: '1.8.0',
  v8: '4.5.103.35',
  zlib: '1.2.8' }

npm 도움

대부분의 cli 툴킷처럼, npm에는 훌륭한 내장 도움말 기능이 있습니다. 설명과 개요는 항상 사용할 수 있습니다. 이것들은 본질적으로 맨 페이지 이다.

$ npm help test
NAME
       npm-test - Test a package

SYNOPSIS
           npm test [-- <args>]

           aliases: t, tst

DESCRIPTION
       This runs a package's "test" script, if one was provided.

       To run tests as a condition of installation, set the npat config to true.

# 1 새로운 프로젝트 시작 npm init

새 프로젝트를 시작 npm init하면 package.json파일 을 대화식으로 작성하여 많은 도움을받을 수 있습니다 그러면 프로젝트의 이름이나 설명과 같은 질문을하게됩니다. 그러나 더 빠른 해결책이 있습니다!

$ npm init --yes

당신이 사용하는 경우 npm init --yes, 그것은 아무것도 묻지 않습니다, 그냥 package.json기본값으로 만듭니다 이러한 기본값을 설정하려면 다음 명령을 사용할 수 있습니다.

npm config set init.author.name YOUR_NAME
npm config set init.author.email YOUR_EMAIL

# 2 npm 패키지 찾기

적합한 패키지를 찾는 것은 상당히 어려울 수 있습니다. 선택할 수있는 수십만 개의 모듈이 있습니다. 우리는 경험에서 이것을 알고 있으며 최신 Node.js 설문 조사에 참여한 개발자들 도 적절한 npm 패키지를 선택하는 것이 실망 스럽다고 말했습니다. HTTP 요청을 보내는 데 도움이되는 모듈을 고르겠습니다.

작업을 훨씬 쉽게 만들어주는 하나의 웹 사이트는 npms.io 입니다. 품질 , 인기 및 유지 관리 와 같은 측정 항목을 보여줍니다 모듈이 오래된 종속성을 가지고 있는지, linter가 구성되었는지, 테스트로 덮여 있는지, 가장 최근의 커밋이 이루어 졌는지에 따라 계산됩니다.

npm 패키지 찾기

# 3 npm 패키지 조사

우리 모듈 ( request우리 예제 에서 모듈 이 될 것임)을 선택하고 나면 , 문서를 살펴보고 공개 된 이슈를 점검하여 우리가 우리의 어플리케이션에 무엇을 요구하는지 더 잘 알 수 있도록해야합니다. 더 많은 npm 패키지를 사용할수록 취약하거나 악의적 인 위험이 높아짐을 잊지 마십시오. npm 관련 보안 위험 에 대해 더 자세히 알고 싶다면 관련 가이드 라인을 읽어보십시오.

cli에서 모듈의 홈페이지를 열려면 다음을 수행하십시오.

$ npm home request

미해결 문제 또는 공개적으로 사용 가능한 로드맵 (있는 경우)을 확인하려면 다음을 시도해보십시오.

$ npm bugs request

또는 모듈의 자식 저장소를 확인하려면 다음을 입력하십시오.

$ npm repo request

# 4 종속성 저장

프로젝트에 포함시킬 패키지를 찾았 으면 패키지를 설치하고 저장해야합니다. 그것을하는 가장 일반적인 방법은 사용하는 것입니다 npm install request.

한 단계 더 나아가 package.json 파일에 자동으로 추가하려면 다음을 수행하십시오.

$ npm install request --save

npm은 ^기본적으로 접두사를 사용하여 종속성을 저장합니다 즉, 다음 npm install버전에서는 주요 버전 범프가없는 최신 모듈이 설치됩니다. 이 동작을 변경하려면 다음을 수행하십시오.

$ npm config set save-prefix='~'

정확한 버전을 저장하려면 다음을 시도해보십시오.

$ npm config set save-exact true

# 5 종속성 잠그기

이전 절에서 설명한 것처럼 정확한 버전 번호를 가진 모듈을 저장하더라도 대부분의 npm 모듈 작성자는 그렇지 않다는 것을 알고 있어야합니다. 패치와 기능을 자동으로 얻으려면 정상적으로 수행하십시오.

프로덕션 환경에서는 상황이 쉽게 문제가 될 수 있습니다. 다른 버전을 프로덕션 환경에 로컬로 배치 할 수 있습니다 이 새 버전에 프로덕션 시스템에 영향을주는 버그가있을 때 문제가 발생합니다.

이 문제를 해결하려면 사용할 수 있습니다 npm shrinkwrap그것은 npm-shrinkwrap.json여러분의 컴퓨터에 설치된 모듈의 정확한 버전뿐만 아니라 종속물의 버전을 포함 하는 것을 생성합니다 이 파일을 제 위치에두면 npm install동일한 종속성 트리를 재현하는 데이 파일을 사용합니다.

# 6 오래된 종속성 확인

오래된 의존성을 확인하기 위해, npm은 npm outdated명령 에 내장 된 툴 메쏘드를 제공합니다 확인하고 싶은 프로젝트 디렉토리에서 실행해야합니다.

$ npm outdated
conventional-changelog    0.5.3   0.5.3   1.1.0  @risingstack/docker-node
eslint-config-standard    4.4.0   4.4.0   6.0.1  @risingstack/docker-node
eslint-plugin-standard    1.3.1   1.3.1   2.0.0  @risingstack/docker-node
rimraf                    2.5.1   2.5.1   2.5.4  @risingstack/docker-node

더 많은 프로젝트를 관리하면 각 프로젝트에서 모든 종속성을 최신 상태로 유지하는 것이 압도적 인 작업이 될 수 있습니다. 이 작업을 자동화하기 위해 Greenkeeper 를 사용할 수 있습니다. Greenkeeper 는 종속성이 업데이트되면 저장소에 풀 요청을 자동으로 보냅니다.

devDependencies프로덕션에서는 # 7 없음

개발 종속성을 이유에 따라 개발 종속성이라고합니다. 프로덕션 환경에 설치하지 않아도됩니다. 프로덕션 환경에서 보안 문제가 발생할 수있는 모듈이 적어짐에 따라 배포 아티팩트를 작고 안전하게 만듭니다.

프로덕션 종속성 만 설치하려면 다음을 실행하십시오.

$ npm install --production

또는 NODE_ENV환경 변수를 production으로 설정할 수 있습니다 .

$ NODE_ENV=production npm install

@RisingStack #nodejs를 통해 "프로덕션 환경에서 개발 종속성을 설치하지 마십시오."

<p style="margin: 8px; color: #6e7b8d; font-size:0.7em; text-align:right; text-transform: uppercase;">
    <a style="padding-right: 25px; color: #999; font-weight: bold; background: transparent url(https://risingstack-blog.s3.amazonaws.com/2016/May/1462889492_twitter-1462871499796.png) no-repeat right top" href="https://twitter.com/share?text=%22Dont%20install%20development%20dependencies%20in%20production%22%20via%20%40RisingStack%20%23nodejs;url=https://blog.risingstack.com/nodejs-at-scale-npm-best-practices" target="_blank" c>Click To Tweet</a>
</p>

# 8 프로젝트 및 토큰 보안

로그인 한 사용자와 함께 npm을 사용하는 경우, npm 토큰이 .npmrc파일에 저장됩니다. 많은 개발자들이 GitHub에 도트 파일을 저장하기 때문에 이러한 토큰은 실수로 게시됩니다. 현재 .npmrcGitHub 에서 파일을 검색 할 때 수천 개의 결과가 있습니다. 토큰을 포함하는 엄청난 비율입니다. 리포지토리에 도트 파일이있는 경우 자격 증명이 푸시되지 않았는지 다시 한 번 확인하십시오!

가능한 보안 문제의 또 다른 원인은 우연히 npm에 게시되는 파일입니다. 기본적으로 npm은 .gitignore파일을 존중하며 해당 규칙에 일치하는 파일은 게시되지 않습니다. 그러나 .npmignore파일 을 추가하면 파일의 내용이 무시 .gitignore되므로 병합되지 않습니다.

# 9 패키지 개발

패키지를 로컬에서 개발할 때는 대개 npm에 게시하기 전에 프로젝트 중 하나를 사용해 패키지를 시험해보고 싶을 것입니다. 이것은 npm link구출에 관해서입니다.

npm link이것이 npm link실행 된 패키지에 링크하는 심볼릭 링크를 글로벌 폴더에 생성한다는 것은 무엇입니까?

npm link package-name다른 위치에서 실행 하여 전역 적으로 설치된 폴더에서 현재 폴더 package-name의 /node_modules디렉토리로 심볼릭 링크를 만들 수 있습니다 .

@RisingStack #nodejs를 통해 "npm 링크를 사용하여 패키지를 로컬에서 테스트"

<p style="margin: 8px; color: #6e7b8d; font-size:0.7em; text-align:right; text-transform: uppercase;">
    <a style="padding-right: 25px; color: #999; font-weight: bold; background: transparent url(https://risingstack-blog.s3.amazonaws.com/2016/May/1462889492_twitter-1462871499796.png) no-repeat right top" href="https://twitter.com/share?text=%22Use%20npm%20link%20to%20test%20packages%20locally%22%20via%20%40RisingStack%20%23nodejs;url=https://blog.risingstack.com/nodejs-at-scale-npm-best-practices" target="_blank" c>Click To Tweet</a>
</p>

그것을 실제로 보자!

# create a symlink to the global folder
/projects/request $ npm link

# link request to the current node_modules
/projects/my-server $ npm link request

# after running this project, the require('request') 
# will include the module from projects/request