Package.json

d_wwan·2023년 9월 8일
1
post-thumbnail

package.json

1. 구성

  • Description
    • package.json에 필요한 모든 것들
    • json일 수도 있고 문자열일 수도 있는, 패키지에 대한 설명
    • 사람들이 패키지를 찾아내고, 이해하는데 도움을 줌
  • name
    • version과 더불어 가장 중요한 부분!
      • version과 name은 패키지의 가장 unique한 식별자가 될 수 있다.
      • 없으면 패키지 설치 불가
      • 패키지의 변경은 version의 변경을 동반한다.
    • name필드는 몇 가지 규칙을 동반한다.
      • name은 214자 이하여야 한다.
      • name은 . 또는 _ 로 구성되어야 한다.
      • name은 소문자로 구성되어야 한다.
      • the name can't contain any non-URL-safe characters.
        • "{", "}", "|", "\", "^", "~", "[", "]", and "`".
  • version
    • node-semver
      • version은 node-semver에 의한 해석이 가능해야 한다.
        const semver = require('semver')
        
        semver.valid('1.2.3') // '1.2.3'
        semver.valid('a.b.c') // null
        semver.clean('  =v1.2.3   ') // '1.2.3'
        semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
        semver.gt('1.2.3', '9.8.7') // false
        semver.lt('1.2.3', '9.8.7') // true
        semver.minVersion('>=1.0.0') // '1.0.0'
        semver.valid(semver.coerce('v2')) // '2.0.0'
        semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
      • comparator
        • < Less than

        • <= Less than or equal to

        • > Greater than

        • >= Greater than or equal to

        • = Equal. If no operator is specified, then equality is assumed, so this operator is optional, but MAY be included.

          semver.inc('1.2.3', 'prerelease', 'beta')
          // '1.2.4-beta.0'

          package.json에서 version을 표현할 때 쓰는 문법인 듯 하다..

  • description
    • string으로 패키지 검색을 위한 글자를 작성한다.
    • description은 npm search로 검색 가능
  • keywords
    • keywords는 string[]형식이다.
    • 역시 npm search로 검색 가능
  • homepage
    "homepage": "https://github.com/owner/project#readme"
    project 홈페이지에 대한 링크
  • bugs
    {
      "url" : "https://github.com/owner/project/issues",
      "email" : "project@hostname.com"
    }
    project 이슈 트래커에 대한 링크나 연락처
  • license
    • license는 외부인이 사용 가능여부와 사용 제한에대해 알 수있게 한다.
    • 사용불가능한 패키지는 “UNLICENSED”, “private” 등으로 설정하기도 한다.
  • people
    {
      "name" : "Barney Rubble",
      "email" : "b@rubble.com",
      "url" : "http://barnyrubble.tumblr.com/"
    }
    • author은 한 사람
    • contributors은 사람의 배열
    • person자체는 name, email, url 등의 프로퍼티를 가진 객체다.
  • funding
    {
      "funding": {
        "type" : "individual",
        "url" : "http://example.com/donate"
      },
    
      "funding": {
        "type" : "patreon",
        "url" : "https://www.patreon.com/my-account"
      },
    
      "funding": "http://example.com/donate",
    
      "funding": [
        {
          "type" : "individual",
          "url" : "http://example.com/donate"
        },
        "http://example.com/donateAlso",
        {
          "type" : "patreon",
          "url" : "https://www.patreon.com/my-account"
        }
      ]
    }
    유저는 npm fund를 통해 패키지 개발에 자금을 지원하는 방법에 대한 최신 정보를 제공하는 URL이 포함된 객체, 문자열 URL 또는 이러한 객체의 배열을 지정할 수 있습니다.
  • files
    • 선택적 파일 필드는 패키지가 종속성으로 설치될 때 포함될 항목을 설명하는 파일 패턴의 배열입니다. 파일, 디렉토리 또는 글로브 패턴(, /* 등)을 포함하면 패키지를 패킹할 때 해당 파일이 포함되도록 합니다. 이 필드를 생략하면 기본값이 [""]가 되어 모든 파일이 포함된다.
    • .git, CVS, .svn, node_modules등의 파일은 항상 ignore된다.
  • main
    • 메인 필드는 프로그램에 대한 기본 진입점인 모듈 ID이다. 메인 스크립트를 설정하지 않으면 기본적으로 패키지의 루트 폴더에 있는 index.js로 설정된다.
  • browser x
    • 모듈을 클라이언트 딴에서 사용하려는 경우 브라우저 필드를 사용해야한다.
  • bin
    • 패키지가 전역으로 설치되면 해당 파일이 전역 bins 디렉터리 내에 링크되거나 bin 필드에 지정된 파일을 실행하는 cmd(Windows 명령 파일)가 생성된다. bin필드는 실행 가능한 자바스크립트 파일을 상위 패키지에 노출하는데 사용되는 필드다.
      • ex)
        {
          "bin": {
            "create-react-app": "./index.js"
          }
        }
  • man
    {
      "name": "foo",
      "version": "1.2.3",
      "description": "A packaged foo fooer for fooing foos",
      "main": "foo.js",
      "man": "./man/doc.1"
    }
    • 프로그램이 찾을 수 있도록 단일 파일 또는 파일 이름 배열을 지정한다.
    • 단일 파일만 제공된 경우, man 의 결과물이 되도록 설치됩니다.
      • 위 예시처럼 man필드를 작성할 경우 foo로 파일이 변경
  • directories
    • CommonJS 패키지 사양에는 디렉토리 객체를 사용하여 패키지의 구조를 나타낸다.
    • npm의 package.json을 보면 doc, lib, man에 대한 디렉토리가 있다.
  • repository
    • 코드가 있는 깃허브 레포지터리 주소를 링크한다.
      {
        "repository": {
          "type": "git",
          "url": "https://github.com/npm/cli.git"
        }
      }
  • scripts
    • script 속성은 패키지 lifecycle에서 다양한 시점에 실행되는 스크립트 명령이 포함된 딕셔너리다.
    • key : event
    • value : 실행할 명령
    • lifecycle 스크립트 종류
      • NPM
        • prepare : 패키지가 패킹 되기 전에 실행되는 스크립트
          • publish, pack, install이 실행될 때 호출됨
        • prepublishOnly : prepare, packed이전에 실행
          • publish가 실행될 때 호출
        • prepack : 패키지가 압축되기 전에 호출
          • publish, pack이 실행될 때 호출
        • postpack : 최종목적지에 이동하기 전에 호출
        • dependencies : node_modules 디렉토리가 수정되었을 때 호출
          • -g mode에선 실행되지 않는다.
      • life cycle op order scripts | npm Docs
    • User
      • npm이 root에서 실행될 때 ( 최상위 디렉토리를 말하는 것 같다. ) 스크립트는 유효한 uid 및 gid로 실행된다.
        • uid
          • Math.random메소드를 이용해 부여되는 랜덤의 uid
          • 보안을 위해 crypto.getRandomValues()를 이용하기도한다.
  • config
    • config 필드는 업그레이드 전반에 걸쳐 지속되는 패키지 스크립트에 사용되는 구성 매개변수를 설정할 수 있다.
      {
        "name": "foo",
        "config": {
          "port": "8080"
        }
      }
      ‘start’커맨드가 port프로퍼티를 참조한다고 가정하면, 이 값은 npm config set foo:port 8001명령으로 오버드라이브 가능하다.
  • Dependencies
    • 패키지 이름, 버전 범위를 맵핑한 오브젝트를 통해서 의존성을 지정한다. 버전 범위는 한칸or공백으로 구분되는 문자열들로 나타낸다. 의존성은 압축파일 형태거나 git URL로 식별된다.
    • 시험 목적, 코드 변환, 컴파일을 위한 도구는 dependencies 객체에 포함시키지 말도록 하고, 대신에 devDependencies를 참조…
    • URL ,Git, Local 경로 가능
  • devDependencies
    • 외부인이 내 모듈을 이용하여 다른 프로그램을 작성할 때 우리 모듈에서 사용하고 있는 외부 테스트 프레임워크나 문서화 프레임워크를 같이 다운받고 싶지 않을 것이다. 이런 것들은 개발에만 필요하지 모듈 사용에는 필요하지 않다.
    • 이런 경우 추가적인 항목들을 이 필드에 넣느다.
    • 이 항목들은 npm link 또는 npm install을 실행할 때 설치된다.
  • engines
    • 호환되는 node의 버전을 지정할 수 있다.
      { "engines" : { "node" : ">=0.10.3 <0.12" } }
    • engine-strict 플래그를 지정하면 정상적으로 작동할 수 있는 npm의 버전 범위도 지정가능하다.
  • OS
    • 모듈이 동작할 수 있는 운영 체제를 지정할 수 있다.
    • !를 사용해 블랙리스트도 지정가능하다.
    • **cpu필드도 마찬가지**
  • preferGlobal
    • 작성하는 패키지가 명령행 애플리케이션으로 반드시 -g로 설치되어야 한다면 이 필드를 true로 설정해서 로컬 설치 시 경고를 출력가능하다.
  • private
    • 이 필드를 true로 설정하면 배포가 불가능해진다.
    • 만약 패키지가 특정 레지스트리에만 배포되어야 한다면
      • publishConfig 딕셔너리 registry 설정 파라미터를 사용해야한다.
      • publishConfig
        • 배포과정에서 설정되는 설정 값들이다.
  • Default fields
    "scripts": {"start": "node server.js"}
    
    "scripts":{"preinstall": "node-gyp rebuild"}
    
    "contributors": [...]
profile
세상 모든 사람들을 이해할 수 있는 날이 오기를

0개의 댓글