开发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 installapm 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 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和系统有了更深入的理解。

Atom飞行手册翻译: 4.5 ~ 4.8相关推荐

  1. Atom飞行手册翻译: 2.12 在Atom中写作

    在Atom中写作 虽然Atom通常可能用来编写软件的代码,但是它还可以用来高效地编写文章.这通常采用一些标记语言,比如说Markdown和Asciidoc(也就是英文手册所用的格式)来完成.下面我们会 ...

  2. Atom飞行手册翻译: 3.7 调试

    调试 Atom拱了一些工具来帮助你理解预料之外的行为和调试问题.这篇指南介绍了一些工具和方法用于帮助你调试,以及提供了一些提交工单(issue)时的帮助信息. 升级到最新版本 你可能遇到了在最新版本已 ...

  3. Atom飞行手册翻译: 2.7 ~ 2.10

    自动补全 如果你仍旧希望节约一些打字时间,Atom自带简单的自动补全功能. 通过使用ctrl-space,自动补全工具可以让你看到并插入可选的完整单词. 通常,自动补全工具会浏览当前打开的整个文档,寻 ...

  4. Atom飞行手册翻译: 3.4 文本处理包

    文本处理包 在我们写完第一个包之后,让我们看一看我们能写出来的其它包的例子.这一节会引导你创建一个简单的命令来将选中的文字替换为字符画(ascii art).在你在单词"cool" ...

  5. Atom飞行手册翻译: 4.2 深入键表(keymap)

    深入键表(keymap) 键表文件是以JSON或者CSON编码的文件,其中含有嵌套的哈希表.它们的工作方式像是样式表,但是它们指定匹配选择器的元素的快捷键的作用,而不是应用样式属性.下面是一些快捷键的 ...

  6. Atom飞行手册翻译: 4.3 作用域设置、作用域和作用域描述符

    作用域设置.作用域和作用域描述符 Atom支持语言特定的设置.你可以在Markdown文件中软换行,或者在Python中把tab的宽度设置为4. 语言特定的设置只是一些东西的子集,我们把它叫做&quo ...

  7. Atom飞行手册翻译: 4.4 Atom中的序列化

    Atom中的序列化 当一个窗口被刷新,或者从上一次会话恢复的时候,视图和它相关的对象会从JSON表达式中反序列化,它们在窗口上一次关闭时储存.要使你自己的视图和对象兼容刷新,你需要让它们很好地执行序列 ...

  8. Atom飞行手册翻译: 4.1 配置API

    在我们编写了一些主题和包之后,让我们花一些时间来深入了解一些Atom的工作方式.在这一章中,我们会更进一步了解Atom中独特的内部API和系统,甚至查看一些源码来看一看它们是如何很好地工作的. 配置A ...

  9. Atom飞行手册翻译: 1.3 Atom基础

    Atom基础 既然Atom在你的系统中已经安装了,让我们启动.配置并且熟悉这一编辑器吧. 当你首次启动Atom时,你会看到这样一个界面: 这是Atom的欢迎界面,它会给你一些很好的建议,关于如何开始使 ...

最新文章

  1. Swift - 委托(delegate)的介绍,及使用样例
  2. 不要瞧不起技术,项目中有了技术管理会让项目经理很省心
  3. weex 富文本_Weex richtext 富文本某个字加重显示
  4. linux下vim 打开文件方式
  5. 科大星云诗社动态20210120
  6. 【JDBC】各版本jar包下载网址及Tomcat下载
  7. 密码学专题 文本数据库
  8. Qt工作笔记-使用QGraphicsItem加载图片并实现碰撞
  9. 不用if/while等操作实现
  10. 【渝粤教育】国家开放大学2018年秋季 0676-22T物流成本管理 参考试题
  11. linux可执行文件在window,教你如何在windows下编译linux生成windows的可执行程序
  12. C语言基础知识(学习笔记)
  13. 英语3500词(三)professions主题 (2022.1.15)
  14. UE4莫名其妙崩溃的解决办法
  15. Nginx(4)之搭建图片服务器
  16. 关于NX/UG使用KF二次开发的常用方法
  17. 同步传输与异步传输的区别
  18. Appium基础篇15-模拟手指点击tap方法
  19. merge_region
  20. 中南大学计算机网,中南大学计算机网络习题2014

热门文章

  1. 判断给定的两个数是否是亲和数_动画演示LeetCode算法题:004-寻找两个有序数组的中位数...
  2. python loop until_python3-asyncio 学习笔记 3 -- run_until_complete
  3. 12. GD32F103C8T6入门教程-定时器-3路pwm输出
  4. 为什么本地硬盘无法启动计算机,win10专业版系统本地磁盘打不开怎么办?
  5. 【蓝桥杯单片机】IAP15在线仿真实验:Connecting to target system lost!please reset your target system and try again
  6. 第九章——计数器/定时器和多功能接口芯片
  7. KG—ARM-Thumb子程序调用规则—ATPCS
  8. 今日初学C语言写的几个程序。
  9. php接收不到post数据_PHP解决Vue发起POST请求,接收不到数据
  10. .net Core 安装在linux上