공유 모듈

공유 모듈은 다른 확장 프로그램과 앱 간에 공유할 수 있는 권한이 없는 리소스 모음입니다. 공유 모듈의 일반적인 용도는 다음과 같습니다.

  • API로 HTML, JS, 기타 소스를 제공할 수 있는 공유 모듈을 배포하여 이 모듈에 종속된 확장과 독립적으로 업데이트할 수 있는 API를 제공할 수 있습니다. 이는 앱이 공유 모듈의 코드에서 실행되는 데이터의 더 작은 페이로드인 런타임 및 게임 엔진에 유용할 수 있습니다.
  • 다운로드 최적화로 공유 모듈에는 여러 확장 프로그램에서 사용하는 공통 리소스가 포함되어 있습니다. 종속 확장 프로그램이 처음 설치될 때 한 번 다운로드됩니다.

매니페스트

공유 모듈은 두 개의 매니페스트 필드(내보내기 및 가져오기)를 통해 사용됩니다.

export 필드는 확장 프로그램이 리소스를 내보내는 공유 모듈임을 나타냅니다.

{
  "version": "1.0",
  "name": "My Shared Module",
  "export": {
    // Optional list of extension IDs explicitly allowed to
    // import this Shared Module's resources.  If no allowlist
    // is given, all extensions are allowed to import it.
    "allowlist": [
      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    ]
  }
  // Note: no permissions are allowed in Shared Modules
}

import 필드는 확장 프로그램 및 앱에서 특정 공유 모듈의 리소스에 종속됨을 선언하는 데 사용됩니다.

{
  "version": "1.0",
  "name": "My Importing Extension",
  ...
  "import": [
    {"id": "cccccccccccccccccccccccccccccccc"},
    {"id": "dddddddddddddddddddddddddddddddd"
     "minimum_version": "0.5" // optional
    },
  ]
}

리소스 액세스

공유 모듈 리소스는 가져오기 확장 프로그램의 루트에 있는 예약된 경로 _modules/SHARED_MODULE_ID를 통해 액세스합니다. 예를 들어 ID가 'cccccccccccccccccccc

<script src="_modules/cccccccccccccccccccccccccccccccc/foo.js">

가져오기 확장 프로그램의 ID가 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaa'인 경우 공유 모듈의 리소스 전체 URL은 다음과 같습니다.

chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/_modules/cccccccccccccccccccccccccccccccc/

공유 모듈의 리소스는 가져오기 확장 프로그램의 출처에 오버레이되므로 가져오기 확장 프로그램에 부여된 모든 권한은 공유 모듈의 코드에 사용할 수 있습니다. 또한 공유 모듈은 절대 경로를 사용하여 확장 프로그램 가져오기의 리소스에 액세스할 수 있습니다.

설치 / 제거

공유 모듈은 종속 확장 프로그램에서 필요할 때 Chrome 웹 스토어에서 자동으로 설치되며, 모듈을 참조하는 마지막 확장 프로그램이 제거될 때 자동으로 제거됩니다. 공유 모듈을 사용하는 확장 프로그램을 업로드하려면 공유 모듈을 Chrome 웹 스토어에 게시해야 하고 확장 프로그램의 허용 목록으로 공유 모듈 사용이 제한되어서는 안 됩니다.

개발 중에는 확장 프로그램에서 사용하는 공유 모듈을 수동으로 설치해야 합니다. 사이드로드되거나 압축해제된 확장 프로그램으로 로드된 확장 프로그램의 경우 자동 설치가 발생하지 않습니다. 로컬에 설치되고 압축해제된 공유 모듈의 경우 필드를 사용하여 공유 모듈이 올바른 ID를 사용하는지 확인해야 합니다.