{"id":13672790,"url":"https://github.com/mufancom/makescript","last_synced_at":"2026-01-23T07:17:16.478Z","repository":{"id":96150339,"uuid":"308292410","full_name":"mufancom/makescript","owner":"mufancom","description":null,"archived":false,"fork":false,"pushed_at":"2020-12-29T08:08:47.000Z","size":4501,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-18T13:12:48.818Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mufancom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-10-29T10:25:24.000Z","updated_at":"2023-04-05T08:02:37.000Z","dependencies_parsed_at":"2023-03-16T04:00:48.419Z","dependency_job_id":null,"html_url":"https://github.com/mufancom/makescript","commit_stats":null,"previous_names":["mufancom/makescript","makeflow/makescript"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mufancom%2Fmakescript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mufancom%2Fmakescript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mufancom%2Fmakescript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mufancom%2Fmakescript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mufancom","download_url":"https://codeload.github.com/mufancom/makescript/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251246394,"owners_count":21558762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T09:01:48.547Z","updated_at":"2026-01-23T07:17:16.451Z","avatar_url":"https://github.com/mufancom.png","language":"TypeScript","readme":"# MakeScript\n\nMakeScript 是一个可以将脚本执行集成到 [Makeflow](https://www.makeflow.com) ，或者通过 API 调用执行脚本的工具。\n\n## 开始使用\n\n在开始之前，你需要先安装 [NodeJs](https://nodejs.org) 和 [yarn](https://yarnpkg.com/getting-started/install)（或 [npm](https://docs.npmjs.com/about-npm)）。然后使用 yarn 或 npm 在全局安装 MakeScript 的 CLI 工具。\n\n```bash\nyarn global add @makeflow/makescript\n```\n\n安装完成后在终端执行 `makescript` 命令。在第一个问题中输入 `y`；在第二个问题中输入当前仓库的 git 地址 (`https://github.com/makeflow/makescript.git`) 后回车；在第三个问题中直接回车。\n\n![get-started-makescript.png](images/get-started-makescript.png)\n\n然后等待片刻，看到控制台输出了 `Successfully to registered as \"default\"` 字样后即代表 MakeScript 启动成功。（因为会从 GitHub clone 仓库，如果网络环境不好可能会等待较长时间）。\n\nMakeScript 启动成功后，在浏览器中访问 [`http://localhost:8900`](http://localhost:8900) 即可进入 MakeScript 的管理界面。第一次进入时会要求输入一个密码进行初始化，以后再次进入需要提供初始化时输入的密码进行身份验证。\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"images/get-started-initialization.png\" alt=\"get-started-initialization.png\" width=\"450\"\u003e\u003c/p\u003e\n\n输入密码初始化后，在管理界面中的 \"Token 管理\" 界面中新建一个 Token 并复制。然后使用 HTTP 请求工具发起如下 HTTP 请求：\n\n```http\nPOST http://localhost:8901/api/script/default/echo-message/enqueue\nContent-Type: application/json\nAuthorization: Token the-token-created-before\n\n{\n  \"parameters\": {\n    \"message\": \"Hello\"\n  }\n}\n```\n\n如果操作成功，该请求将会响应 `{id: record-id}`。\n\n回到管理界面进入 “脚本执行” 界面，将会记录列表里看到刚刚的请求。在列表里点击该记录，然后点击右下角的 \u003csvg viewBox=\"0 0 1024 1024\" focusable=\"false\" data-icon=\"caret-right\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\"\u003e\u003cpath d=\"M715.8 493.5L335 165.1c-14.2-12.2-35-1.2-35 18.5v656.8c0 19.7 20.8 30.7 35 18.5l380.8-328.4c10.9-9.4 10.9-27.6 0-37z\"\u003e\u003c/path\u003e\u003c/svg\u003e 按钮，在弹出的对话框中输入密码 `abc123` 后点击 “执行” 按钮。\n\n执行后将会在该界面看到执行结果及脚本输出等信息：\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"images/ger-started-running-result.png\" alt=\"ger-started-running-result.png\" width=\"500\"\u003e\u003c/p\u003e\n\n## 文档\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [MakeScript 想要解决的问题](#makescript-%E6%83%B3%E8%A6%81%E8%A7%A3%E5%86%B3%E7%9A%84%E9%97%AE%E9%A2%98)\n- [MakeScript](#makescript)\n  - [安装 MakeScript](#%E5%AE%89%E8%A3%85-makescript)\n  - [启动 MakeScript](#%E5%90%AF%E5%8A%A8-makescript)\n  - [MakeScript 管理界面](#makescript-%E7%AE%A1%E7%90%86%E7%95%8C%E9%9D%A2)\n  - [MakeScript 配置文件](#makescript-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)\n- [Agent](#agent)\n  - [安装 Agent](#%E5%AE%89%E8%A3%85-agent)\n  - [初始化 Agent](#%E5%88%9D%E5%A7%8B%E5%8C%96-agent)\n  - [Agent 配置文件](#agent-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)\n- [脚本仓库](#%E8%84%9A%E6%9C%AC%E4%BB%93%E5%BA%93)\n  - [`hooks`](#hooks)\n  - [`password`](#password)\n  - [`scripts`](#scripts)\n    - [命令类型](#%E5%91%BD%E4%BB%A4%E7%B1%BB%E5%9E%8B)\n      - [process](#process)\n      - [node](#node)\n      - [shell](#shell)\n      - [sqlite](#sqlite)\n- [How To](#how-to)\n  - [如何在有脚本被触发时发送通知？](#%E5%A6%82%E4%BD%95%E5%9C%A8%E6%9C%89%E8%84%9A%E6%9C%AC%E8%A2%AB%E8%A7%A6%E5%8F%91%E6%97%B6%E5%8F%91%E9%80%81%E9%80%9A%E7%9F%A5)\n  - [如何实现脚本执行时需要密码验证？](#%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E8%84%9A%E6%9C%AC%E6%89%A7%E8%A1%8C%E6%97%B6%E9%9C%80%E8%A6%81%E5%AF%86%E7%A0%81%E9%AA%8C%E8%AF%81)\n  - [如何与 Makeflow 进行集成](#%E5%A6%82%E4%BD%95%E4%B8%8E-makeflow-%E8%BF%9B%E8%A1%8C%E9%9B%86%E6%88%90)\n  - [如何在内网环境内使用 MakeScript](#%E5%A6%82%E4%BD%95%E5%9C%A8%E5%86%85%E7%BD%91%E7%8E%AF%E5%A2%83%E5%86%85%E4%BD%BF%E7%94%A8-makescript)\n  - [如何在同一台服务器上启动多个 MakeScript (Agent)](#%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%8C%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%90%AF%E5%8A%A8%E5%A4%9A%E4%B8%AA-makescript-agent)\n  - [如何在一个脚本仓库中定义提供多个脚本定义](#%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC%E4%BB%93%E5%BA%93%E4%B8%AD%E5%AE%9A%E4%B9%89%E6%8F%90%E4%BE%9B%E5%A4%9A%E4%B8%AA%E8%84%9A%E6%9C%AC%E5%AE%9A%E4%B9%89)\n- [License](#license)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## MakeScript 想要解决的问题\n\n在项目的早期阶段，可能会因为业务需要或客户需求而进行一些分散零碎而且很细小的功能需求，但是又不属于产品的功能或暂未安排到日程中。比如客户咨询客服修改密码、客户要求删除账号等。\n\n可能这些需求只需要简单地改变数据库中的一个字段、或是执行一段简单的脚本。但这些操作都不适合非技术人员去操作，但是为这些小需求都提供一个非技术人员能操作的界面成本又太高。\n\n于是 MakeScript 让技术人员只关注脚本中业务逻辑，而 MakeScript 负责去提供一个用户友好的操作界面。且搭配 [Makeflow](https://www.makeflow.com) 的流程系统，还能轻松地与其他工作流进行有机结合。\n\n## MakeScript\n\n### 安装 MakeScript\n\nMakeScript 以 npm 包的形式提供了一个 CLI，你可以通过 [`yarn`](https://yarnpkg.com/getting-started/install) 或 [`npm`](https://docs.npmjs.com/about-npm) 来将 MakeScript 安装到全局：\n\n- yarn:\n\n```bash\nyarn global add @makeflow/makescript\n```\n\n- npm:\n\n```bash\nnpm install @makeflow/makescript --global\n```\n\n### 启动 MakeScript\n\n安装 MakeScript 后，直接在控制台中输入 `makescript` 命令即可启动。首次启动时会要求输入一些必要信息：\n\n1. 首先会询问是否启用默认 [Agent](#agent)，输入 `y` 或直接回车为启用，输入 `n` 为不启用：\n   ![MakeScript default agent prompts](images/makescript-default-agent-prompts.png)\n   如果需要在启动 MakeScript 的本机上执行脚本，则可以启用默认 Agent。如果当前机器仅作为 API 端，或仅与 Makeflow 进行桥接，而执具体的脚本会在其他机器上执行，则可以不启用默认节点。\n\n2. 如果启用了默认 Agent，则会提示输入 [脚本仓库](#脚本仓库) 的地址，MakeScript 在每次启动时将会同步该仓库：\n   ![MakeScript scripts repo url prompts](images/makescript-scripts-repo-url-prompts.png)\n   输入一个脚本仓库的地址并回车后，MakeScript 将会将该仓库的脚本同步到本地，以方便后续执行。该地址可以是一个 [HTTPS 地址](https://docs.github.com/en/free-pro-team@latest/github/using-git/which-remote-url-should-i-use#cloning-with-https-urls) 或 [SSH 地址](https://docs.github.com/en/free-pro-team@latest/github/using-git/which-remote-url-should-i-use#cloning-with-ssh-urls)，但请确保有对该仓库的访问权限。\n\n3. 如果启用了默认节点，且在上一步中输入了脚本仓库地址。则会提示输入脚本子路径，该路径为脚本定义文件 `makescript.json` 或 `makescript.js` 在脚本仓库中的相对路径。如果脚本定义文件在脚本仓库的根目录中，可直接回车。\n   ![MakeScript dir prompts](images/makescript-dir-prompts.png)\n\n### MakeScript 管理界面\n\nMakeScript 提供了一个 Web 管理界面，启动 MakeScript 后使用浏览器进入 [`http://localhost:8900`](http://localhost:8900) 来访问。第一次访问时会提示输入密码进行初始化：\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"images/makescript-initialize.png\" alt=\"get-started-initialization.png\" width=\"450\"\u003e\u003c/p\u003e\n\n输入密码成功初始化后，即会进入 MakeScript 的管理主界面。该界面中，包含了 `脚本执行`、`Token 管理`、`Makeflow 集成` 和 `管理节点` 四个选项：\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"images/makescript-home.png\" alt=\"get-started-initialization.png\" width=\"450\"\u003e\u003c/p\u003e\n\n- `脚本执行`: 在 `脚本执行` 界面中，可以查看历史执行记录、执行需要手动执行的脚本、查看所有可执行的脚本。\n- `Token 管理`: 在 `Token 管理` 界面中，可以创建和停用 Token。\n- `Makeflow 集成`: 在 `Makeflow 集成` 界面中，可以登录到 Makeflow 后将脚本列表以超级应用的形式发布到 Makeflow 。\n- `节点管理`: 在 `节点管理` 界面中，可以查看节点注册命令、节点注册链接和已注册的节点及所有节点的脚本数量。\n\n### MakeScript 配置文件\n\n在 MakeScript 初始化后，可以通过编辑配置文件来修改 MakeScript 的一些配置。该配置文件的路径默认在 `~/.makescript/makescript.json`。其类型定义文件如下：\n\n\u003c!--\n  @inplate\n  ```ts\n  {{makescriptConfigTypeText}}\n  ```\n--\u003e\n\n```ts\nexport interface JSONConfigFile {\n  /**\n   * 可让外部访问到的地址，默认为 http://localhost:8900\n   */\n  url: string;\n  listen: {\n    /**\n     * MakeScript 服务监听到的 host，默认为 localhost\n     */\n    host: string;\n    /**\n     * MakeScript 服务监听到的端口，默认为 8900\n     */\n    port: number;\n  };\n  agent: {\n    /**\n     * 提供给 Agent 验证身份的 Token\n     */\n    token: string;\n  };\n  /**\n   * Makeflow 相关配置\n   */\n  makeflow: {\n    /**\n     * Makeflow 的地址，默认为 https://www.makeflow.com\n     */\n    url: string;\n    powerApp: {\n      name: string;\n      displayName: string;\n      description: string;\n    };\n  };\n}\n```\n\n\u003c!-- @end --\u003e\n\n## Agent\n\nMakeScript 默认会在本地执行脚本（启用了默认 Agent 时），但在实际情况中有可能会在不同的环境中有不同的脚本要执行。而分别管理各个服务器会比较麻烦，所以 MakeScript 提供了只用于执行脚本的 Agent。不同的 Agent 可以连接到一个 MakeScript 主节点，脚本的管理和集成等在 MakeScript 主节点上进行统一操作，各个 Agent 只负责执行脚本并返回结果。\n\n### 安装 Agent\n\n因为 MakeScript 的 Agent 没有管理界面、与 Makeflow 集成、提供 API 等功能，比 MakeScript 本体更轻量，所以单独提供了一个程序用于启动节点。与 MakeScript 一致，节点工具也以 npm 包的形式提供，可以通过 [`yarn`](https://yarnpkg.com/getting-started/install) 或 [`npm`](https://docs.npmjs.com/about-npm) 来进行安装：\n\n- yarn:\n\n```bash\nyarn global add @makeflow/makescript-agent\n```\n\n- npm:\n\n```bash\nnpm install @makeflow/makescript-agent --global\n```\n\n### 初始化 Agent\n\n在目标机器上成功安装 Agent 工具后，在控制台执行 `makescript-agent` 并在控制台输入一些必要的信息进行初始化后，即可启动一个 Agent 并连接到 MakeScript 主节点。在第一次执行该命令时，需要输入一些必要的信息以初始化：\n\n![agent-initialize.png](images/agent-initialize.png)\n\n1. 首先需要提供的是 MakeScript 祝节点节点提供的节点注册链接，该链接在 MakeScript 管理界面的 “节点管理” 界面里可以查看到并复制：\n\u003cp align=\"center\"\u003e\u003cimg src=\"images/makescript-home-with-agents-management-notation.png\" alt=\"makescript-home-with-agents-management-notation.png\" width=\"450\"\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003cimg src=\"images/makescript-agents-management-with-join-link-notation.png\" alt=\"makescript-agents-management-with-join-link-notation.png\" width=\"450\"\u003e\u003c/p\u003e\n\n\u003e 也可以在节点管理界面中点击 \"节点加入命令\" 复制该命令后，直接使用该命令初始化 Agent。这样会在初始化时跳过这一步。\n\n2. 需要提供的第二个信息是一个名称空间，该名称空间用于区分不同的 Agent，不同 Agent 的名称空间不能重复。\n\n3. 需要提供的第三个信息是一个脚本仓库的地址，这个脚本仓库中的脚本均可以在该 Agent 上执行。\n\n4. 需要提供的第四个信息是一个脚本的子路径，这个路径为脚本定义文件 `makescript.json` 在脚本仓库中的位置。如果脚本定义文件在脚本仓库根目录中，可直接回车。\n\n### Agent 配置文件\n\n在 MakeScript 的 Agent 初始化后，可以通过编辑配置文件来修改 MakeScript Agent 的一些配置。该配置文件的路径默认在 `~/.makescript/agent/makescript-agent.json`。其类型定义文件如下：\n\n\u003c!--\n  @inplate\n  ```ts\n  {{agentConfigTypeText}}\n  ```\n--\u003e\n\n```ts\nexport interface JSONConfigFile {\n  /**\n   * MakeScript Agent 注册到 MakeScript 时的名称\n   */\n  name: string;\n  server: {\n    /**\n     * 包含 Token 信息的 MakeScript 地址，类似 https://example.com/token\n     */\n    url: string;\n  };\n  scripts: {\n    /**\n     * 脚本仓库的地址\n     */\n    git: string;\n    /**\n     * 脚本定义文件所在目录\n     */\n    dir?: string;\n  };\n  /**\n   * Agent 要使用的网络代理\n   */\n  proxy?: string | undefined;\n}\n```\n\n\u003c!-- @end --\u003e\n\n## 脚本仓库\n\n脚本仓库里包含了一系列将要执行的脚本以及根目录或子目录下一个名为 `makescript.json` 或 `makescript.js` 的定义文件。该定义文件中定义脚本列表、执行密码、脚本参数、脚本和脚本钩子等信息。可以参考本项目根目录中的 `makescript.js` 文件和 `example-scripts/makescript.json` 文件。在编写脚本定义时，可以使用 `makescript check-definition` 命令来检测该文件是否符合定义要求。该定义文件可以有如下属性：\n\n### `hooks`\n\n可选属性，`hooks` 属性中可以定义一系列 hook，在发生特定事件时，将会执行定义里的命令。目前可用的钩子有：\n\n- `install`: 初始化脚本仓库时将会执行，可以用于安装脚本仓库所需依赖\n- `postscript`: 当有脚本被触发时将会执行，可用于通知管理员手动执行脚本\n\n示例：\n\n```json\n{\n  \"hooks\": {\n    \"install\": \"yarn\",\n    \"postscript\": \"sh ./notify.sh\"\n  }\n}\n```\n\n`hooks` 中与脚本相关的 hook（`postscript`）在执行时，可以使用以下环境变量：\n\n- `SCRIPT_NAME`: 当前脚本名\n- `NAMESPACE`: 当前 Agent 的名称空间\n\n### `password`\n\n可选属性，`password` 属性可以提供一个密码哈希值，提供了该值后，执行该脚本仓库中的所有脚本时均需要输入确认密码。该哈希值可以通过 `makescript generate-hash` 生成。\n\n示例：\n\n```json\n{\n  \"password\": \"$2b$10$Qqz.Lqa1WwtvdFXgHM3pAu/sbzwpKo94zUCYwMiipDJZq.67QB/wW\"\n}\n```\n\n### `scripts`\n\n必选属性，`scripts` 属性接受一个数组，其定义了所有可供执行的脚本，以及这些脚本的需要接受的参数。除了通用属性外，当脚本定义的 `type` 不同时，也会有一些额外的属性，在后面有单独的介绍。\n\n示例：\n\n```json\n{\n  \"scripts\": [\n    {\n      \"displayName\": \"Echo Message\",\n      \"name\": \"echo-message\",\n      \"type\": \"node\",\n      \"module\": \"example-scripts/echo-message.js\",\n      \"parameters\": [\"message\"],\n      \"manual\": false\n    }\n  ]\n}\n```\n\n`scripts` 中的单个元素定义如下：\n\n```ts\ntype ScriptDefinition = {\n  /**\n   * 脚本的展示名称\n   */\n  displayName?: string;\n  /**\n   * 脚本的唯一识别名称，在同一个脚本仓库中需唯一\n   */\n  name: string;\n  /**\n   * 脚本类型，可选值有 `process`、`node`、`shell`、`sqlite`\n   */\n  type: string;\n  /**\n   * 执行该脚本时是否需手动确认\n   */\n  manual?: boolean;\n  /**\n   * 脚本的参数列表，接受参数定义或字符串数组\n   *\n   * 参数的传递方式根据不同类型的脚本而不同，具体请查看不同类型脚本的相关介绍\n   */\n  parameters?: (\n    | {\n        /**\n         * 参数唯一识别名称，在同一个脚本的定义里需唯一\n         */\n        name: string;\n        /**\n         * 参数的展示名称\n         */\n        displayName?: string;\n        /**\n         * 是否为必选参数\n         */\n        required?: boolean;\n        /**\n         * 要创建 MakeScript 的表单类型\n         */\n        field?:\n          | string\n          | {\n              type: string;\n              data?: unknown;\n            };\n      }\n    | string\n  )[];\n  /**\n   * 单个脚本的执行密码的哈希值，该属性出现时将会覆盖同名全局属性\n   */\n  password?: string;\n  /**\n   * 单个脚本的钩子，该属性下的子属性出现时会覆盖全局属性中的对应子属性\n   */\n  hooks?: {\n    postscript?: string;\n  };\n};\n```\n\n#### 命令类型\n\n##### process\n\n`scripts[]#type` 为 `process` 时，必须提供 `scripts[]#command` 属性指定一个个执行文件。\n\n该类型的脚本的参数会通过环境变量进行传递。\n\n##### node\n\n`scripts[]#type` 为 `node` 时，必须提供 `scripts[]#module` 指定一个 js 文件。\n\n该类型的脚本的参数会通过环境变量进行传递。\n\n##### shell\n\n`scripts[]#type` 为 `shell` 时，必须提供 `scripts[]#command` 指定一个命令。\n\n该类型的脚本的参数会通过环境变量进行传递。\n\n##### sqlite\n\n`scripts[]#type` 为 `sqlite` 时，脚本定义里有一下的额外属性：\n\n- `file`: SQL 文件路径\n- `db`: 为一个 sqlite 数据库文件的地址或结构为 `{path: string; password: string}` 的对象\n\n该类型的脚本的参数会通过 SQL 参数传递，在 SQL 文件中使用 `$parameterName` 的形式来使用。\n\n## How To\n\n### 如何在有脚本被触发时发送通知？\n\n可以使用脚本仓库的定义中的 [`hooks#postscript`](#hooks) 或 `scripts[]#hooks#postscript` 属性来在脚本被触发时执行一个脚本，再结合 [TriggerScript](https://github.com/makeflow/triggerscript) 在脚本中使用 `curl` 等工具调用一个通知请求。\n\n### 如何实现脚本执行时需要密码验证？\n\n可以使用脚本仓库的定义中的 [`password`](#password) 或 `scripts[]#password` 结合 `makescript generate-hash` 命令来实现。\n\n### 如何与 Makeflow 进行集成\n\n1. 在 MakeScript 的 Web 管理界面中，点击首页中的 \"Makeflow 集成\" 按钮，然后输入 Makeflow 的用户名与密码进行登录。\n2. 登录成功后点击 \"发布 Power App \" 按钮后点击对话框中的 \"确认发布\" 按钮将应用发布或更新到 Makeflow\n3. 到 Makeflow 的应用商店中安装该应用\n4. 在 Makeflow 的流程中使用 MakeScript 应用提供的超级流程项\n\n### 如何在内网环境内使用 MakeScript\n\n如出于安全原因等，需要仅在内网环境内能管理 MakeScript ，但又需要与公网的 [Makeflow](https://www.makeflow.com) 进行集成。需要让运行 MakeScript 的服务器能访问 Makeflow，且用 Nginx 等反向代理工具，将 MakeScript 的 `/api/makeflow/*` API 暴露到公网供 Makeflow 访问。\n\n### 如何在同一台服务器上启动多个 MakeScript (Agent)\n\nMakeScript (Agent) 是通过一个工作目录来确定如何启动 MakeScript (Agent) 的，如果直接执行 `makescript` (`makescript-agent`) 命令，则会默认使用 `~/.makescript` (`~/.makescript/agent`) 作为工作目录。可以通过 `--dir \u003cdir\u003e` (`-d \u003cdir\u003e`) 参数来手动指定工作目录，而达到在同一台服务器上启动多个独立的 MakeScript (Agent)。\n\n```bash\n# 在默认工作目录 (~/.config/makescript) 中启动 MakeScript\nmakescript\n\n# 以 ~/.makescript/a-agent 为工作目录启动一个 MakeScript Agent\nmakescript-agent --dir ~/.makescript/a-agent\n\n# 以 ~/.makescript/another-agent 为工作目录启动另一个 MakeScript Agent\nmakescript-agent -d ~/.makescript/another-agent\n```\n\n### 如何在一个脚本仓库中定义提供多个脚本定义\n\n可以将脚本的定义放在不同的目录中，然后在初始化 Agent 时输入定义文件所在目录或使用 [Agent 配置文件](#agent-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6) 中的 `scripts#dir` 来指定脚本定义存放位置。\n\n## License\n\nMIT License.\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmufancom%2Fmakescript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmufancom%2Fmakescript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmufancom%2Fmakescript/lists"}