天天看點

Atom飛行手冊翻譯: 4.5 ~ 4.8開發Node子產品通過服務和其它包互動維護你的包小結

開發Node子產品

Atom中的一些包是Node子產品,而不是Atom的包。如果你想要修改這些Node子產品,例如

atom-keymap

,你需要把它們連結到不同于普通Atom包的開發環境中。

把Node子產品連結到你的Aton開發環境

下面是運作node子產品的本地版本的步驟,而不是Atom中的apm。我們使用

atom-keymap

作為一個例子:

$ git clone https://github.com/atom/atom-keymap.git
$ cd atom-keymap
$ npm install
$ npm link
$ apm rebuild # This is the special step, it makes the npm work with Atom's version of Node
$ cd WHERE-YOU-CLONED-ATOM
$ npm link atom-keymap
$ atom # Should work!           

然後,當你修改了node子產品的代碼時,你必須運作

npm install

apm rebuild

通過服務和其它包互動

Atom包可以通過叫做服務的帶有版本控制的APi,和其它包進行互動。在你的

package.json

檔案中指定一個或者多個版本号來提供服務,每個版本号都要帶有一個包的主子產品中的方法。

{
  "providedServices": {
    "my-service": {
      "description": "Does a useful thing",
      "versions": {
        "1.2.3": "provideMyServiceV1",
        "2.3.4": "provideMyServiceV2",
      }
    }
  }
}           

在你的包的主子產品中實作上面的方法。這些方法會在一個包被激活的任何時候調用,它們會使用它們的通信服務。它們應該傳回實作了服務API的一個值。

module.exports =
  activate: -> # ...

  provideMyServiceV1: ->
    adaptToLegacyAPI(myService)

  provideMyServiceV2: ->
    myService           

與之相似,指定一個或多個

版本範圍

來使用一個服務,每個都帶有一個包的主子產品中的方法。

{
  "consumedServices": {
    "another-service": {
      "versions": {
        "^1.2.3": "consumeAnotherServiceV1",
        ">=2.3.4 <2.5": "consumeAnotherServiceV2",
      }
    }
  }
}           

這些方法會在一個包被激活的任何時候調用,它們會提供它們的通信服務。它們會接受到一個通信對象作為一個參數。你通常需要在包提供的服務失效的時間中,進行同種類型的清除工作。從你使用服務的方法中傳回一個

Disposable

來完成它:

{Disposable} = require 'atom'

module.exports =
  activate: -> # ...

  consumeAnotherServiceV1: (service) ->
    useService(adaptServiceFromLegacyAPI(service))
    new Disposable -> stopUsingService(service)

  consumeAnotherServiceV2: (service) ->
    useService(service)
    new Disposable -> stopUsingService(service)           

維護你的包

雖然到目前為止,你在開發一個包的時候,釋出是最通常的行為,但是你還需要做一些其它的事情。

撤銷釋出一個版本

如果你錯誤地釋出了你的包的一個版本,或者你發現了一個顯眼的bug或安全漏洞,你可能想要撤銷這個版本的釋出。例如,如果你的包叫做

package-name

而且錯誤的版本是v1.2.3,你可以執行如下指令:

apm unpublish [email protected]           

這會從

https://atom.io/

包注冊處移除特定的版本。任何下載下傳了這個版本的人會依然保留它,但是它不再對其它人提供安裝。

添加協作人

一些包對于一個人來說太大了。有時優先級會更改,或者其它人想要提供幫助。你可以在你的包的GitHub倉庫中,通過

添加它們到協作者

,來讓其它人幫忙或者建立共同擁有者。注意:任何具有你的倉庫推送(push)權限的人,都可以釋出屬于這個倉庫的包的新版本。

你也可以擁有屬于

Github組織

的包。任何人如果屬于一個組織,并且這個組織具有一個包所在倉庫的的推送權限,它就可以釋出這個包的新版本。

轉移控制權

這是一個永久的改變,而且沒有辦法撤銷!

如果你想要把你的包的支援移交給其它人,你應該向新的擁有者

轉移這個包的倉庫

撤銷釋出你的包

在删除你的倉庫之前撤銷釋出你的包非常重要。如果你首先删除了倉庫,你就會失去對包的通路途徑,并且在沒有協助之下不能将其恢複。

如果你不再對你的包提供支援,并且找不到任何人來接盤,你可以從

中撤銷釋出你的包。例如,如果你的包叫

package-name

,你可以執行如下指令:

apm unpublish package-name           

這個指令會從

包注冊處移除你的包。任何下載下傳了你的包的副本的人依然會保留,以及能夠使用它,但是它不再對其它人提供安裝。

重命名你的包

如果由于任何原因你需要重命名你的包,你可以使用一條簡單的指令

apm publish --rename

,來修改你的包的

package.json

檔案中的

name

字段,推送(push)一個新的送出(commit)和打上标簽(tag),以及釋出重命名之後的包。向之前名字發送的請求會重定向到新的名字。

一旦一個包的名稱被使用,它就不能其它包複用,即使原來的包撤銷了釋出。

apm publish --rename new-package-name           

小結

現在你應該對Atom核心APi和系統有了更深入的了解。