Atom-Editor: Failed to load init.coffee - ERROR: reserved word 'function'

Atom-Editor: Failed to load init.coffee - ERROR: reserved word 'function'

更新:我找到了 solution/workaround 的问题。我将 init.coffee 重命名为 init.js 因为 Atom 也支持 JavaScript。我还是想知道问题的原因。下面的脚本是无效的 CoffeeScript 还是我遗漏了一些依赖项?我从官方 Arch 存储库安装了 Atom。

由于某种原因,无法加载我的 init.coffee。以下代码来自 Atom 的 "Composed" Commands 文档:

atom.commands.add('atom-text-editor', 'custom:cut-line', function () {
  const editor = this.getModel();
  editor.selectLinesContainingCursors();
  editor.cutSelectedText();
});

Atom 启动时抛出错误:

Failed to load /home/myname/.atom/init.coffee
reserved word 'function'

我不确定这是错误、我的错还是过时文档的结果。错误消息不是很有帮助,因为我已经知道 "function" 是一个保留字,即使我不太了解 Coffee/JavaScript.

我用 () -> {...} 替换了 function,这导致了同样的错误,除了这次是保留字 const

最后,我尝试定义一个命名函数,我将其作为参数传递给 atom.commands.add() 并得到了同样的错误。

我在 Linux。 atom --version returns:

Atom    : 1.46.0
Electron: 4.2.12
Chrome  : 69.0.3497.128
Node    : 10.11.0

您的解决方案方向正确 - 代码是 JavaScript,而不是 CoffeeScript。

看起来您引用的“"Composed" Commands”文档在其示例中同时使用了 JavaScript 和 CoffeeScript。

从 JavaScript 转换:

atom.commands.add('atom-text-editor', 'custom:cut-line', function () {
  const editor = this.getModel();
  editor.selectLinesContainingCursors();
  editor.cutSelectedText();
});

到 CoffeeScript:

atom.commands.add 'atom-text-editor', 'custom:cut-line',  () ->
  editor = @getModel()
  editor.selectLinesContainingCursors()
  editor.cutSelectedText()
  • 调用带参数的函数时,可以省略括号()
  • function 在 CoffeeScript 中被删除,只需使用括号和单个 -> 或双箭头 =>,其中双箭头与 .bind(this) 相同,所以这里是不正确的。
  • 没有 const/let/var 关键字。刚刚定义了没有它们的变量。
  • this.可以换成@.
  • 大括号 ({}) 包装函数定义是可选的。
  • 没有分号。

如果您想学习 CoffeeScript 并帮助社区,您可以通过分叉、编辑和提出 repository.

的拉取请求来自行修复文档

或者,您应该在其存储库的文档中将此错误报告为 issue