내 테스트를 .npm 무시해야합니까?


91

정확히 무엇을 넣어야 .npmignore합니까?

테스트? 물건처럼 .travis.yml, .jshintrc? 모듈을 실행할 때 필요하지 않은 것이 있습니까 (readme 제외)?

이에 대한 지침을 찾을 수 없습니다.


4
때 누군가가 전화를 필요하지 않은 모든 것을 무시해야합니다 npm install yourlibrary예를 들어, .travis.yml.jshintrc
lante에

정말? 읽어보기? 공식적으로 어디에서나 추천합니까?
callum

2
README는 .npmignore또는 "files"( docs.npmjs.com/files/package.json#files )에 관계없이 자동으로 포함됩니다 .
Nicolás Fantone 2018 년

답변:


86

아마 알다시피, NPM은 거기에 들어가야 할 것을 구체적으로 명시하지 않고 기본적으로 무시되는 파일 목록을 가지고 있습니다 . 존재하지 않는 경우 기본적 으로 모든 .gitignore것이 무시 되므로 많은 사람들이 사용 하지 않습니다. 또한 설정에 관계없이 기본적으로 많은 파일이 이미 무시되고 위 링크에 설명 된대로 일부 파일은 항상 무시되지 않습니다.npm.npmignore

기본적으로의 하위 집합이기 때문에 항상 있어야하는 것에 대한 공식적인 내용은 많지 .gitignore않지만 5 년 동안 노드를 사용하여 수집 한 내용은 다음과 같습니다.

참고 : 프로덕션 이란 모듈 자체에서 개발하지 않고 누군가가 모듈을 사용하는 경우를 의미합니다.


시험판 크로스 컴파일 소스

  • 장점 : JavaScript로 크로스 컴파일하는 언어를 사용하는 경우 릴리스 전에 미리 컴파일하고 .coffee패키지에 파일을 포함하지 않고 git 저장소에서 계속 추적 할 수 있습니다.

남은 파일 빌드

  • 장점 : 같은 것을 사용하는 사람들 node-gyp은 빌드 중에 생성되는 개체 파일이 패키지에 들어가면 안됩니다.
  • 단점 : .gitignore어쨌든 항상 들어가야 합니다. npm의 관점에서 .npmignore덮어 쓰기 때문에 이미 파일을 사용하고 있다면 여기에 이러한 것들을 넣어야합니다 .gitignore.

테스트

  • 장점 : 생산 코드의 수하물이 적습니다.
  • 단점 : 테스트 실패를 유발하는 오래된 버전의 노드 실행과 같은 시스템 특정 오류가 발생할 가능성이 적은 경우 라이브 환경에서 테스트를 실행할 수 없습니다.

연속 통합 설정 / 메타 파일

  • 장점 : 다시 말하지만, 수하물이 적습니다. 상황이 다음과 같은 .travis.yml코드를 사용하여 테스트, 또는 볼 필요가 없습니다.

비 readme 문서 및 코드 예제

  • 장점 : 수하물이 적습니다. Readme에서 최소한의 실행 가능한 기능을 표현할 수없는 경우 모듈이 너무 큽니다.
  • 단점 : 사람들은 자신의 파일 시스템에서 완전한 문서와 코드 예제를 볼 수 없습니다. 저장소를 방문해야합니다 (인터넷 연결도 필요함).

Github-pages 객체

  • 장점 : 모듈을 사용하는 경우 CNAME파일 또는 자리 표시 자로 릴리스를 흩뿌 릴 필요가 없습니다 .index.htmlgh-pages

bower.json 및 친구들

  • 장점 : 릴리스 전에 종속성을 구축하기로 결정한 경우 최종 사용자가 bower를 설치 한 다음 더 많은 것을 설치할 필요가 없습니다. 나는 개인적으로 그 물건을 패키지에 보관할 것입니다. 를 수행 할 때 npm installnpm에만 의존하고 다른 외부 소스는 사용하지 않아야합니다.

기본적으로 npm 패키지에서 보관하고 싶은 것이 있지만 npm 저장소에서는 보관하지 않으려는 경우 사용해야합니다. 긴 항목 목록은 아니지만 npm은 사람들이 패키지에 관련없는 개체를 고수하는 것보다 기능을 구축하는 것이 좋습니다.


package.json 파일에서 사용할 수없는 스크립트를 제거하는 방법이 없습니까? 예 : 테스트 스크립트? 나는 ... 모든 것을 제거하지만, 파일에 스크립트를 유지하기 위해 조금 지저분한 느낌
inf3rno

아니 없어. 어쨌든 주로 NPM 용이므로 package.json에서 생략 할 수 있으며 테스트 만 실행하는 경우 원래 명령을 통해 액세스하여 실행할 수 있습니다.
SamT

64

나는 lante의 짧고 통사적인 대답SamT의 큰 대답에 동의합니다 .

  • 패키지에 테스트를 포함해서는 안됩니다.
  • 패키지에는 프로덕션 런타임 파일 만 포함되어야합니다.
  • 그러면 패키지를 더 간단하고 빠르게 다운로드 할 수 있습니다.

그 답변에 대한 나의 기여 :

.npmignore 는 패키지 파일 선택을위한 블랙리스트 방법입니다. 그러나보다 실용적인 방법으로 package.json 의 파일 필드사용 하여 패키지에 포함해야하는 파일을 허용 목록에 추가 할 수 있습니다 .

{
  "files": [
    "lib/",
    "index.js"
  ]
}

나는 그것이 더 간단하고 미래의 증거라고 생각하며 더 나은 의미를 가지고 있습니다.)


3
... 기억하기 쉽고 사고 발생 가능성이 적다는 것은 말할 것도 없습니다 (당신이 내가 할 수있는 한 잊어 버리는 경우). 팁 주셔서 감사합니다.
Connor

2
나는이 접근 방식을 좋아합니다.
Brady Holt

2
package.json의 'main'파일이라고 가정하면 "index.js"를 생략 할 수도 있습니다. :)
Ben George

이미지와 불필요한 문서를 무시하는 것이 좋습니다. 그러나 테스트를 무시하는 것은 좋은 생각이 아닙니다. 추가 KB를 다운로드하는 데는 그다지 시간이 걸리지 않으며 npm test모든 node_module 에서 재귀 를 수행 하면 특정 환경에서 무언가 다르게 작동하는지 힌트를 얻을 수 있습니다.
adelriosantiago

3
@ NicolásFantone files 속성은 glob 패턴도 허용 합니다. 그래서 우리는 생성하지 않고 테스트 파일을 무시할 수 있습니다 .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj

15

그냥 언제 누군가가 할, 명확하게 npm install your-library, NPM은 당신이 당신에 포함하도록 파일을 제외하고는 REPO에 포함되어있는 모든 소스 파일을 다운로드합니다 .npmignore.

라이브러리를 설치하는 사람들은 라이브러리를 실행하기 만하면되며 다른 것은 필요하지 않습니다.

예를 들어, 누군가가 라이브러리를 설치하면 아마도 그 / 그녀는 당신 .travis.yml이나 당신의 .jshintrc파일, 심지어 일부 이미지, Grunt 파일, 문서 등에 대해 신경 쓰지 않을 것입니다 .

.npmignore npm 패키지에 파일 수를 줄이고 다운로드 속도를 높일 수 있습니다.


1
여기에있는 감정은 좋지만 명확히하기 위해 : 다운로드 된 항목에.npmignore 직접적인 영향을주지 않으며 npm 게시 및 업로드 시 패키지에 들어가는 항목에 영향을줍니다 . 이렇게하면 다운로드 할 더 작은 파일이 간접적으로 생성됩니다.
Mark Stosberg

2

테스트를 포함하지 마십시오. 종종 테스트는 실제 코드베이스 크기의 5 배와 같습니다. 테스트가 Github 등에있는 한 충분합니다.

그러나 반드시해야 할 일은 게시 된 형식으로 NPM 패키지 테스트하는 것 입니다 . 실제 코드베이스에 있지만 테스트 스위트의 일부가 아닌 스모크 테스트를 만듭니다.

패키지를 tarballing 한 후 테스트하는 방법은 https://github.com/ORESoftware/r2g 에서 읽을 수 있습니다.

실제로 NPM에 게시하지 않고`npm publish` 결과를 테스트하는 방법은 무엇입니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.