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

相关推荐
ttwuai8 分钟前
Go 后台附件迁到对象存储后,path、cdnUrl 和 tenant_id 怎么一起验?
开发语言·后端·golang
dear_bi_MyOnly12 分钟前
函数模块化:企业级项目高效之道
c++·后端·学习
2601_9620739719 分钟前
苍穹外卖-day07(Spring Cache & 购物车业务逻辑)
java·后端·spring
Sincerelyplz1 小时前
【Pipecat】基于Pipecat的voice agent实践
前端·后端·agent
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 10 章 REST 服务请求与调用 Reactor 与 WebFlux 笔记 28
spring boot·笔记·后端
唐青枫1 小时前
别只会用 put:Zig HashMap 从键值查找到高频统计实战
后端
ttwuai1 小时前
Go 后台清空操作日志失败,权限和无 WHERE 删除怎么排查?
开发语言·后端·golang
choumou_M1 小时前
SpringBoot_7:用户资源的上传与修改
java·spring boot·后端
user_admin_god2 小时前
一体化数据归集接口详细设计说明
java·大数据·spring boot·后端·spring
明月_清风2 小时前
十大经典排序算法 Go 实现全解:从入门到面试通关
后端·算法·排序算法