在 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。
安装步骤如下:
- 设置工作空间。
- 下载并安装库:
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 版本。