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

相关推荐
掘金酱13 分钟前
TRAE Work 实战帮征文 | 获奖名单公示
前端·人工智能·后端
用户693717500138432 分钟前
前阵子刷屏的 Ox-Alpha 真身揭晓!GLM-5.3-Flash 上线,这价格真的杀疯了
前端·后端·github
四千岁38 分钟前
抓包LangChain-了解LangChain的原理
前端·javascript·后端
泡海椒41 分钟前
JQuick-Curl 快速上手:Maven 依赖与第一个 HelloWorld 请求
后端
QQ_21696290961 小时前
【源码编号:project86570】SpringBoot电影院在线选座售票系统:电影排片、在线选座、订单购票、后台管理完整实战
java·spring boot·后端
卷无止境1 小时前
FastAPI 实现 SSO,从协议原理到生产级落地
后端·python·fastapi
卷无止境1 小时前
FastAPI 与 RustFS 集成指南
后端·python·fastapi
先吃饱再说1 小时前
后端开发绕不开的 SQL:从建表、查询到索引优化,一篇讲透
数据库·后端·sql
用户7813667114451 小时前
Ceph RGW 对象上传完整流程解析:请求解析 → 执行 → 落盘
后端
coderCN1 小时前
HTTP(动静分离)
后端