【问题标题】:Using node modules in MarkLogic Modules在 MarkLogic Modules 中使用节点模块
【发布时间】:2019-08-07 19:05:05
【问题描述】:

我正在运行带有公开 REST API 的 Marklogic 服务器。我用自己的资源扩展了 API。这些端点只是文档规定的 .sjs 文件。是否可以在这些 sjs 文件中使用常规节点模块(通过 npm 安装)?

我正在使用 ml-gradle 来部署服务器和端点。我不是要安装 npm 模块的目录。

我尝试进行 npm 安装,然后使用相对路径导入它

const lodash = require('../node_modules/lodash') 

但是,我的 sjs 文件永远找不到这些模块。我假设我给它的导入路径不正确。

【问题讨论】:

    标签: javascript marklogic marklogic-9 ml-gradle


    【解决方案1】:

    MarkLogic 服务器不使用 Node.js,因此不知道何时将包安装到 Node.js 实例中。

    相反,必须将库的 JavaScript 文件安装在 REST API 实例的模块数据库中。见:

    http://docs.marklogic.com/guide/node-dev/extensions

    关于 npm 包的一般注意事项...

    MarkLogic 中的 Node.js 和 SJS(服务器端 JavaScript)是完全不同的环境:

    • Node.js 是单线程和事件驱动的,提供在 Node.js 进程生命周期内持久的全局状态。

    • SJS 是并发和事务性的,为每个主模块提供单独的状态,该状态在该主模块的单个同步调用的生命周期内是持久的。

    因此,事件包在 SJS 环境中没有用处。

    但是,提供无需事件处理即可完成运行的函数的 JavaScript 库(包括 lodash 以及许多解析器)可在 SJS 环境中使用。

    另见:

    http://docs.marklogic.com/guide/jsref/language#id_67900

    在特定的问题上,有些人认为 lodash 已经在很大程度上被 SJS 支持的 ES6 所取代。

    希望对您有所帮助,

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 2018-04-01
      • 2015-11-08
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多