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

相关推荐
q***11654 小时前
Spring 中的 @ExceptionHandler 注解详解与应用
java·后端·spring
用户21411832636025 小时前
Gemini 3 Pro 来了!一句话生成完整网站,AI编程能力断层领先
后端
码事漫谈5 小时前
Linux开发到底指什么?是什么岗位?做什么的?
后端
码事漫谈6 小时前
Windows开发:一场与指针的共舞,亦是超越它的征程
后端
f***45326 小时前
基于SpringBoot和PostGIS的各省与地级市空间距离分析
android·前端·后端
Felix_XXXXL7 小时前
mysql查看binlog日志
java·后端
leonardee7 小时前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端
百锦再7 小时前
第17章 模式与匹配
开发语言·后端·python·rust·django·内存·抽象
百***86468 小时前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
MZ_ZXD0018 小时前
springboot流浪动物救助平台-计算机毕业设计源码08780
java·spring boot·后端·python·spring·flask·课程设计