发行列车已经启动! Asciidoctor.js 的1.5.0版本已经发布,并且现在可以在http://bower.io[Bower]和https://www.npmjs.org[npm]中获得。这次发布是向着使Asciidoctor.js在JavaScript生态系统中广泛可用的重要一步。

Bower 和 npm
Asciidoctor 在 JavaScript 中。
它曾是一个梦想。
然后它成为了一个原型。
现在,它是真实的交易。
Asciidoctor.js是什么?

Asciidoctor.js 是官方用于在 JavaScript 中使用 Asciidoctor 的库。它共享 Asciidoctor 的源代码,并使用 Opal 转译为 JavaScript。通过 Asciidoctor.js,你可以从 JavaScript 转换 AsciiDoc 内容或分析解析的 AsciiDoc 文档的结构。

Important
当升级到Asciidoctor 1.5.0时,请参阅http://asciidoctor.org/docs/migration/[迁移指南]了解有关如何迁移您内容的详细信息。

版本亮点

Asciidoctor.js是Asciidoctor。

如在 Asciidoctor 1.5.0的发布说明中提及的,我们努力使Asciidoctor.js(JavaScript)和Asciidoctor核心(Ruby)保持一致。这意味着你可以期待Asciidoctor.js能像原版一样解析和转换文档。连包含内容的功能也能正常工作!

Warning

实现某些功能,比如包含操作,需要特别考虑,因为JavaScript和Ruby是不同的环境,甚至在不同的JavaScript环境之间也有关键的差异!

例如,在Ruby中读取包含文件仅仅是使用普通的Ruby IO API的问题。在浏览器环境中,我们必须使用`XMLHttpRequest`(即Ajax)作为IO API。如果Asciidoctor.js运行在Node.js上,我们必须使用Node IO API,fs.readSync(),来使其工作。

请放心,我们正在继续努力,以消除任何差异,并将Asciidoctor核心的所有出色功能带到JavaScript上。

继续阅读,学习如何获取Asciidoctor.js!

使用Asciidoctor.js比以往任何时候都简单。

如果你是一个前端或后端的JavaScript开发者,你只需一个命令就能获取最新版本的Asciidoctor.js。

Bower 包

使用Bower安装Asciidoctor.js
$ bower install asciidoctor.js --save
Tip
可选的 --save 标志会自动将包添加到项目的依赖项中。

一旦安装了该软件包,你就可以在HTML页面中添加以下的 script 标签:

<script src="bower_components/asciidoctor.js/dist/asciidoctor-all.min.js"></script>

asciidoctor-all.min.js` 是一个`压缩`版,并且包括了 Asciidoctor 核心,扩展 API 和 Opal。

这是一个简单的例子,展示了如何利用`doctype: 'inline'`选项和`showtitle`属性,将AsciiDoc转换为HTML5。

var asciidoc = "http://asciidoctor.org[*Asciidoctor*] " +
    "running on https://opalrb.com[_Opal_] " +
    "brings AsciiDoc to the browser!";
var options = Opal.hash2(['doctype', 'attributes'], {doctype: 'inline', attributes: ['showtitle']});
var html = Opal.Asciidoctor.$convert(asciidoc, options);
console.log(html);

请查阅https://github.com/asciidoctor/asciidoctor.js#front-end-development[前端开发指南]以了解更多关于Bower包的信息。

NPM包

使用npm安装Asciidoctor.js
$ npm install asciidoctor.js --save
Tip
可选的 --save 标志会自动将包添加到项目的依赖项中。

一旦包安装好后,首先要做的是使用 require 加载 asciidoctor.js 模块,然后你就可以开始使用API了:

sample.js
var asciidoctor = require('asciidoctor.js')(); // (1)
var opal = asciidoctor.Opal; // (2)

var processor = null;
var useExtensions = true;

if (useExtensions) {
  processor = asciidoctor.Asciidoctor(true); // (3)
}
else {
  processor = asciidoctor.Asciidoctor(); // (4)
}

var content = "http://asciidoctor.org[*Asciidoctor*] " +
    "running on https://opalrb.com[_Opal_] " +
    "brings AsciiDoc to Node.js!";
var options = opal.hash2(
    ['doctype', 'attributes'],
    {doctype: 'inline', attributes: ['showtitle']});
var html = processor.$convert(content, options); // (5)
console.log(html); // (6)
  1. 加载Asciidoctor.js库

  2. 检索并给顶级Opal命名空间创建别名

  3. 启用扩展的 Asciidoctor 实例化

  4. 不带扩展实例化Asciidoctor

  5. 使用Asciidoctor.js将AsciiDoc内容转换为HTML5

  6. 将HTML5输出打印到控制台

将文件保存为`sample.js`并使用`node`命令运行它:

$ node sample.js

你应该在终端中看到以下输出:

<a href="http://asciidoctor.org"><strong>Asciidoctor</strong></a> running on <a href="https://opalrb.com"><em>Opal</em></a> brings AsciiDoc to Node.js!</p>
Important
要在Asciidoctor.js中取得成功,理解如何在JavaScript环境中处理Ruby对象是很重要的。我们建议你浏览https://opalrb.com[Opal文档]以学习方法名是如何映射的以及它所期望的数据类型。

查看https://github.com/asciidoctor/asciidoctor.js#back-end-development[后端开发指南]以了解更多关于npm包的信息。

Asciidoctor.js在Node上变得越来越火了。

Node.js 是最热门的 JavaScript 发生地,而 npm 是管理和分发这种热度的包管理器。我们希望 Asciidoctor.js 成为这个生态系统的一部分。开始构建工具,我们也需要它存在于那里。这就是为什么我们迈出了打包 Asciidoctor.js 作为 npm 包的第一步…​事实上,是好几个!Asciidoctor 现在有了一个新的游乐园!

这里是已经发布的npm包:

asciidoctor.js

Asciidoctor.js的主要npm包

grunt-asciidoctor

一个用于在你的http://gruntjs.com[Grunt]项目中处理AsciiDoc源文件的npm包。

社区已经开始如此使用这些包:

asciidoc-preview (Atom 编辑器)

一个用于Atom的插件,可以在你输入时即时显示文档预览!

asciidoc-preview (Brackets Editor)

一个用于Brackets的扩展,它能在你打字时显示文档的预览!

grunt-asciidoctor-assemble

一个为http://gruntjs.com[Grunt]创建的静态网站生成器,由https://github.com/tedbergeron[@tedbergeron]开发

当然仍然存在挑战,但我们将会解决它们。前往https://github.com/asciidoctor/asciidoctor.js[Asciidoctor.js 项目]来参与吧。

我们来玩这个新游戏吧!

Asciidoctor.js 在 JVM 上

你没有看错。浏览器并不是唯一支持JavaScript的环境。(我们说的不是那些从浏览器中逃出来的JavaScript引擎,比如Node.js。)我们讨论的是最多用途的多语言运行时环境,JVM(Java虚拟机)。

Alex Soto 正在致力于将 Asciidoctor.js 集成进 AsciidoctorJ,这样您就可以在 JVM 上使用 Nashorn、http://dynjs.org[dynjs] 以及其他在其上运行的 JavaScript 引擎。https://github.com/rahmanusta/AsciidocFX[AsciidocFX 项目]已经在 Nashorn 上使用 Asciidoctor.js,所以这不仅仅是一个想法!

要确保Asciidoctor.js在JVM上顺畅运行,仍然有几个挑战需要解决,比如要实现包含功能的工作。请前往https://github.com/asciidoctor/asciidoctorj[AsciidoctorJ项目]参与并帮助实现这一目标!

致谢

Asciidoctor.js 与 Asciidoctor 核心的对齐是一项重大努力。它需要很多人的输入,他们真的团结起来迎接这个挑战。

我们特别感谢https://github.com/opal/opal/graphs/contributors[Opal开发者],特别是Adam Beynon、meh和Elia Schito,他们让Asciidoctor.js成为现实。他们对我们的努力做出了积极响应,对Opal进行了更改和修复,并普遍提供了让我们持续前进的反馈。

我们还要感谢Anthonny Quérouil,他为Asciidoctor.js制作了一个Grunt构建,用以编译、聚合和压缩,同时帮助将成品发布到Bower和npm上。

感谢所有测试了Asciidoctor.js的人,无论是直接测试还是通过使用工具。你们的参与帮助Asciidoctor.js成为了真正的实用工具!

如果您有任何问题或反馈,我们鼓励您参与https://discuss.asciidoctor.org[讨论列表]。我们在那里与您相见!