Atom中的一些包是Node模塊,而不是Atom的包。若是你想要修改這些Node模塊,例如atom-keymap
,你須要把它們連接到不一樣於普通Atom包的開發環境中。node
下面是運行node模塊的本地版本的步驟,而不是Atom中的apm。咱們使用atom-keymap
做爲一個例子:git
$ 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
。github
Atom包能夠經過叫作服務的帶有版本控制的APi,和其它包進行交互。在你的package.json
文件中指定一個或者多個版本號來提供服務,每一個版本號都要帶有一個包的主模塊中的方法。npm
{ "providedServices": { "my-service": { "description": "Does a useful thing", "versions": { "1.2.3": "provideMyServiceV1", "2.3.4": "provideMyServiceV2", } } } }
在你的包的主模塊中實現上面的方法。這些方法會在一個包被激活的任什麼時候候調用,它們會使用它們的通訊服務。它們應該返回實現了服務API的一個值。json
module.exports = activate: -> # ... provideMyServiceV1: -> adaptToLegacyAPI(myService) provideMyServiceV2: -> myService
與之類似,指定一個或多個版本範圍來使用一個服務,每一個都帶有一個包的主模塊中的方法。安全
{ "consumedServices": { "another-service": { "versions": { "^1.2.3": "consumeAnotherServiceV1", ">=2.3.4 <2.5": "consumeAnotherServiceV2", } } } }
這些方法會在一個包被激活的任什麼時候候調用,它們會提供它們的通訊服務。它們會接受到一個通訊對象做爲一個參數。你一般須要在包提供的服務失效的時間中,進行同種類型的清除工做。從你使用服務的方法中返回一個Disposable
來完成它:ide
{Disposable} = require 'atom' module.exports = activate: -> # ... consumeAnotherServiceV1: (service) -> useService(adaptServiceFromLegacyAPI(service)) new Disposable -> stopUsingService(service) consumeAnotherServiceV2: (service) -> useService(service) new Disposable -> stopUsingService(service)
雖然到目前爲止,你在開發一個包的時候,發佈是最一般的行爲,可是你還須要作一些其它的事情。ui
若是你錯誤地發佈了你的包的一個版本,或者你發現了一個顯眼的bug或安全漏洞,你可能想要撤銷這個版本的發佈。例如,若是你的包叫作package-name
並且錯誤的版本是v1.2.3,你能夠執行以下命令:atom
apm unpublish package-name@1.2.3
這會從 https://atom.io/ 包註冊處移除特定的版本。任何下載了這個版本的人會依然保留它,可是它再也不對其它人提供安裝。版本控制
一些包對於一我的來講太大了。有時優先級會更改,或者其它人想要提供幫助。你能夠在你的包的GitHub倉庫中,經過添加它們到協做者,來讓其它人幫忙或者建立共同擁有者。注意:任何具備你的倉庫推送(push)權限的人,均可以發佈屬於這個倉庫的包的新版本。
你也能夠擁有屬於Github組織的包。任何人若是屬於一個組織,而且這個組織具備一個包所在倉庫的的推送權限,它就能夠發佈這個包的新版本。
這是一個永久的改變,並且沒有辦法撤銷!
若是你想要把你的包的支持移交給其它人,你應該向新的擁有者轉移這個包的倉庫。
在刪除你的倉庫以前撤銷發佈你的包很是重要。若是你首先刪除了倉庫,你就會失去對包的訪問途徑,而且在沒有協助之下不能將其恢復。
若是你再也不對你的包提供支持,而且找不到任何人來接盤,你能夠從 https://atom.io/ 中撤銷發佈你的包。例如,若是你的包叫package-name
,你能夠執行以下命令:
apm unpublish package-name
這個命令會從 https://atom.io/ 包註冊處移除你的包。任何下載了你的包的副本的人依然會保留,以及可以使用它,可是它再也不對其它人提供安裝。
若是因爲任何緣由你須要重命名你的包,你可使用一條簡單的命令apm publish --rename
,來修改你的包的package.json
文件中的name
字段,推送(push)一個新的提交(commit)和打上標籤(tag),以及發佈重命名以後的包。向以前名字發送的請求會重定向到新的名字。
一旦一個包的名稱被使用,它就不能其它包複用,即便原來的包撤銷了發佈。
apm publish --rename new-package-name
如今你應該對Atom核心APi和系統有了更深刻的理解。