Node.js 中的 MTA 包

在 Node.js 生态系统中,mta 是一个用于探索和验证多目标应用程序描述符(mta.yaml)的工具。它既可以作为 Go 库使用,也可以作为命令行工具,此外,还提供了 npm 包以供使用。

多目标应用程序(MTA)是由多个使用不同技术创建并部署到不同运行时的应用程序和资源模块组成的包,但它们具有共同的生命周期。用户可以使用 mta.yaml 文件将这些模块捆绑在一起,描述它们与其他模块、服务和接口的相互依赖关系,并将它们打包在一个 MTA 项目中。

mta 工具的功能

mta 工具提供了多种功能,包括:

  • 结构探索 :检索 mta.yaml 文件对象的结构,例如获取特定模块所需的资源列表。
  • 模式验证 :根据指定的模式版本验证 mta.yaml 文件。
  • 语义正确性验证 :确保 mta.yaml 文件的语义正确性,例如模块/资源名称的唯一性、requires/provides 对的解析等。
  • 描述符与项目结构的验证 :验证描述符与项目文件夹结构的匹配程度,例如 path 属性在现有项目文件夹中的引用。
  • 部署数据获取:获取构建部署 MTA 描述符所需的数据,例如部署模块类型。

作为 Go 库的使用

要将 mta 作为 Go 库使用,需要满足以下要求:

  • Go 版本:需要 Go 版本高于 1.13.x。

安装步骤如下:

  1. 设置工作空间。
  2. 下载并安装库:
bash 复制代码
  go get github.com/SAP/cloud-mta/mta

在代码中导入该库:

go 复制代码
import "github.com/SAP/cloud-mta/mta"

以下是一个快速入门示例:

go 复制代码
// 设置 MTA 项目的路径
mf, err := ioutil.ReadFile("/path/mta.yaml")
if err != nil {
    return err
}
// 反序列化 MTA 内容
m := Unmarshal(mf)
if err != nil {
    return err
}
// 获取模块属性
module, err := m.GetModuleByName(moduleName)
if err != nil {
    return err
}

作为命令行工具的使用

mta 的某些功能可作为命令行工具使用,可以从 GitHub 发布页面下载,或作为 npm 包安装。命令行工具的命令可被其他程序用作 API,例如 mta-lib npm 包,它公开了用于读取和操作 mta.yaml 文件的 JavaScript API。

通过 npm 包安装

mta npm 包安装可执行文件,允许您从 shell 或命令行运行它。可以通过以下命令全局安装:

bash 复制代码
npm install -g mta

本地安装

mta-local npm 包提供相同的命令行工具,无需全局安装。它被其他库打包,并提供了一种根据当前操作系统延迟下载可执行文件并运行它的方法。可以如下使用:

javascript 复制代码
const { spawn } = require("process");
const mtaPath = require("mta-local").paths["mta"];
const childProcess = spawn(mtaPath, args);
// 处理进程事件

使用 webpack 打包

要从使用 webpack 打包的应用程序中使用这些 npm 库,需要将 bin/mta 文件复制到 webpack 输出目录(保持相同的文件结构),使其可执行,并启用 __dirname 的使用。以下是 webpack 配置示例:

javascript 复制代码
const path = require("path");
const fs = require("fs");
const CopyWebpackPlugin = require("copy-webpack-plugin");

const config = {
    // ...
    node: {
        __dirname: false,
    },
    plugins: [
        new CopyWebpackPlugin({
            patterns: [
                {
                    from: path.join(require.resolve("mta-local"), "..", "bin"),
                    to: path.resolve(__dirname, "dist", "bin"),
                },
            ],
        }),
        function (compiler) {
            compiler.hooks.done.tap("ExecuteChmodOnBinMta", () => {
                fs.chmodSync(path.resolve(__dirname, "dist", "bin", "mta"), "755");
            });
        },
    ],
};

Node.js 版本要求

随着越来越多的 npm 包使用 ECMAScript 模块而非 CommonJS,mta 自 v1.0.5 起使用 axios 代替存在中等严重性漏洞的 binwrap 来下载二进制文件,但 axios 仅支持 ECMAScript 模块,无法在 Node.js v10 及以下版本,以及较低的 v11、v12、v13 版本上运行。axios 可在最新版本的 Node.js v11.15、v12.22、v13.14 上运行。因此,自 v1.0.5 起,mta 不再支持 Node.js v10 及更低版本,包括较低的 v11、v12、v13 版本。

相关推荐
你的人类朋友11 小时前
说说签名与验签
后端
databook11 小时前
Manim实现脉冲闪烁特效
后端·python·动效
canonical_entropy15 小时前
AI时代,我们还需要低代码吗?—— 一场关于模型、演化与软件未来的深度问答
后端·低代码·aigc
颜如玉15 小时前
HikariCP:Dead code elimination优化
后端·性能优化·源码
考虑考虑16 小时前
Jpa使用union all
java·spring boot·后端
bobz96517 小时前
virtio vs vfio
后端
Rexi17 小时前
“Controller→Service→DAO”三层架构
后端
bobz96518 小时前
计算虚拟化的设计
后端
深圳蔓延科技18 小时前
Kafka的高性能之路
后端·kafka
Barcke18 小时前
深入浅出 Spring WebFlux:从核心原理到深度实战
后端