Node.js 中的 MTA 包

举报
汪子熙 发表于 2025/09/05 14:38:33 2025/09/05
【摘要】 在 Node.js 生态系统中,mta 是一个用于探索和验证多目标应用程序描述符(mta.yaml)的工具。它既可以作为 Go 库使用,也可以作为命令行工具,此外,还提供了 npm 包以供使用。多目标应用程序(MTA)是由多个使用不同技术创建并部署到不同运行时的应用程序和资源模块组成的包,但它们具有共同的生命周期。用户可以使用 mta.yaml 文件将这些模块捆绑在一起,描述它们与其他模块、...

在 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. 下载并安装库:
  go get github.com/SAP/cloud-mta/mta

在代码中导入该库:

import "github.com/SAP/cloud-mta/mta"

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

// 设置 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 或命令行运行它。可以通过以下命令全局安装:

npm install -g mta

本地安装

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

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

使用 webpack 打包

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

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 版本。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。