无法在 ScalaJS 中编写 CommonJS 模块,该模块在 Atom 编辑器中作为插件获得 "imported"

Unable to write a CommonJS module in ScalaJS that gets "imported" in Atom editor as a plugin

如果我想将一些ScalaJS方法导出为CommonJS模块,我该怎么办?我有以下但它似乎不起作用:

@ScalaJSDefined
@JSExportTopLevel("default")
object SourceFetch extends js.Object {
  def activate(state: js.Dynamic): Unit = {
    global.console.log("activate")
  }
  def deactivate(): Unit = {
    global.console.log("deactivate")
  }
}

是的,scalaJSModuleKind := ModuleKind.CommonJSModule 在 build.sbt.

我想要的输出是一个如下所示的 commonjs 模块;

export default {
  activate(state) {
    console.log("activate");
  }.
  deactivate() {
    console.log("deactivate");
  }
};

我最后做的是使用已弃用的 sbt 密钥 "scalaJSOutputWrapper" 并在输出 JS 文件的末尾附加 'module.exports = exports["default"];'。

我试过 "scalaJSUseMainModuleInitializer" 但我只能得到 "module.exports" 而不是 "exports" 并且 "module.exports" 的值未定义。

您上面的代码片段确实对应于您编写的那段 ECMAScript 2015 代码。但是,这不会将方法导出为模块的直接成员,而是导出为 default 对象的成员。不,default 导出与模块本身不同(尽管很多人这么认为)。

要将函数导出为模块的直接成员,您应该这样写:

object SourceFetch {
  @JSExportTopLevel("activate")
  def activate(state: js.Dynamic): Unit = {
    global.console.log("activate")
  }
  @JSExportTopLevel("deactivate")
  def deactivate(): Unit = {
    global.console.log("deactivate")
  }
}