atom의 package(plugin)의 package.json이해하기

atom의 package(plugin)프로젝트는 반드시 package.json이 필요하다. 해당 파일은 package(plugin)의 metadata(manifest)을 기술하도록 되어 있다. 기본적으로 Node 의 npm 에서 사용하는 package.json의 구조를 그대로 사용하고 있다. 거기에 더하여 atom에서 사용하는 keys가 추가되어 있다. 하나씩 살펴보도록 한다.

package.json 살펴보기

{
  "name": "my-package",
  "main": "./lib/my-package",
  "version": "0.0.0",
  "description": "A short description of your package",
  "styles": [
  ],
  "
  "keymaps": [
  ],
  "menus": [
  ],
  "snippets": [
  ],
  "activationCommands": {
    "atom-workspace": "my-package:toggle"
  },
  "activationHooks": [
    "language-javascript:grammar-used",
    "language-coffee-script:grammar-used"
  ],
  "repository": "https://github.com/atom/my-package",
  "license": "MIT",
  "engines": {
    "atom": ">=1.0.0 <2.0.0"
  },
  "dependencies": {
  }
}
  • name
    • package name을 기술한다. npm에서 사용하는것과 동일하다.
  • main
    • package의 entry point, 기술되어 있지 않으면 root의 index.coffee나 index.js을 사용한다.
  • version
    • package version을 기술한다. npm에서 사용하는것과 동일하다.
  • description
    • package desc을 기술한다. npm에서 사용하는 것과 동일하다.
  • style

    • package에서 필요로 하는 스타일 정의.
    • 배열안의 요소는 string으로 정의한다.
    • 만약 정의하지 않으면, styles 디렉토리에 정의한 cson파일이 알파벳 순서로 등록된다.
  • keymaps

    • package에서 필요로 하는 key정의.
    • 배열안의 요소는 string으로 정의한다.
    • 만약 정의하지 않으면, keymaps 디렉토리에 정의한 cson파일이 알파벳 순서로 등록된다.
  • menus
    • package에서 기여하는 메뉴를 정의한다.
    • 배열안에 요소는 string으로 정의한다.
    • 만약 정의하지 않으면, menus 디렉토리에 정의한 cson파일이 알파벳 순서로 등록된다.
  • snippets

    • package에서 기여하는 snippets을 정의한다.
    • 배열안의 요소는 string으로 정의한다.
    • 만약 정의하지 않으면, snippets 디렉토리에 정의한 cson파일이 알파벳 순서로 등록된다.
  • activationCommands

    • package가 action되는 trigger인 commands을 정의한다.
    • 배열안의 요소는 string으로 정의한다.
    • 배열안의 요소 값은 command 이다.
    • activationCommands을 정의하지 않으면, package가 load될때 entry point(main)에서 export 하는 activate() 함수가 호울 된다.
    • 주의: package load와 package active는 서로 다르다.
      • load: 특정 폴더(window의 경우, ~/사용자/.atom/package/) 아래 존재하는 폴더들은 모두 package(plugin)으로 판단하고, package.json 을 읽어서, package(plugin)을 atom이 알게 한다. load 타임에, atom의 메뉴, short cut등은 바로 기여됨
      • active: 실제 command을 수행 하거나, 연관된 파일을 open하는 등의 동작이 있을때, 해당 동작에 따라 package가 어떤 일을 수행해야 하는 경우, 해당 package의 entry point을 호출하고, package의 동작을 수행한다.
  • activationHooks
    • package의 activation을 dependency을 주어서, 어떤 동작이 다 된 다음에 package가 activation되도록 하고 싶을때 사용할 수 있는 방법이다.
    • 즉 해당 hooks가 trigger될때 까지 package의 load가 지연된다.
    • 예를 들어 어떤 package가 language-javascript:grammar-used 을 hook 으로 기술 하고 있다면, 해당 package는 language-javascript:grammar-used라는 command가 실행되기 전까지는 load되지 않는다. 즉 해당 package는 language-javascript:grammar-used가 실행 된 이후에 실행 가능한 package라는 소리이다.

results matching ""

    No results matching ""