From 5731c3d461b37c03d0dd86d61689affa2b66fe42 Mon Sep 17 00:00:00 2001 From: zhengkunwang223 Date: Tue, 26 Sep 2023 15:13:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20Node.js=20?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/node/18.18.0/data.yml | 1 + apps/node/18.18.0/docker-compose.yml | 23 +++++++++++++++++++++++ apps/node/18.18.0/run.sh | 27 +++++++++++++++++++++++++++ apps/node/README.md | 21 +++++++++++++++++++++ apps/node/data.yml | 19 +++++++++++++++++++ apps/node/logo.png | Bin 0 -> 7710 bytes 6 files changed, 91 insertions(+) create mode 100644 apps/node/18.18.0/data.yml create mode 100644 apps/node/18.18.0/docker-compose.yml create mode 100644 apps/node/18.18.0/run.sh create mode 100644 apps/node/README.md create mode 100644 apps/node/data.yml create mode 100644 apps/node/logo.png diff --git a/apps/node/18.18.0/data.yml b/apps/node/18.18.0/data.yml new file mode 100644 index 00000000..fcc6ed69 --- /dev/null +++ b/apps/node/18.18.0/data.yml @@ -0,0 +1 @@ +additionalProperties: \ No newline at end of file diff --git a/apps/node/18.18.0/docker-compose.yml b/apps/node/18.18.0/docker-compose.yml new file mode 100644 index 00000000..f6a77239 --- /dev/null +++ b/apps/node/18.18.0/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3' +services: + node: + image: node:${NODE_VERSION} + container_name: ${CONTAINER_NAME} + working_dir: /app + volumes: + - ${CODE_DIR}:/app + - ./run.sh:/run.sh + - ./.env:/.env + command: bash /run.sh + networks: + - 1panel-network + ports: + - ${HOST_IP}:${PANEL_APP_PORT_HTTP}:${NODE_APP_PORT} + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:${NODE_APP_PORT} || exit 1"] + interval: 30s + timeout: 5s + retries: 20 +networks: + 1panel-network: + external: true diff --git a/apps/node/18.18.0/run.sh b/apps/node/18.18.0/run.sh new file mode 100644 index 00000000..3187406d --- /dev/null +++ b/apps/node/18.18.0/run.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +source /.env + +if [[ "$PACKAGE_MANAGER" == "npm" ]]; then + npm config set registry $CONTAINER_PACKAGE_URL +elif [[ "$PACKAGE_MANAGER" == "yarn" ]]; then + yarn config set registry $CONTAINER_PACKAGE_URL +fi + +if [[ "$RUN_INSTALL" -eq "1" ]]; then + if [[ "$PACKAGE_MANAGER" == "npm" ]]; then + npm install + elif [[ "$PACKAGE_MANAGER" == "yarn" ]]; then + yarn install + else + echo "未知的 PACKAGE_MANAGER: $PACKAGE_MANAGER" + exit 1 + fi +fi + + +if [[ "$PACKAGE_MANAGER" == "npm" ]]; then + npm run $EXEC_SCRIPT +elif [[ "$PACKAGE_MANAGER" == "yarn" ]]; then + yarn run $EXEC_SCRIPT +fi diff --git a/apps/node/README.md b/apps/node/README.md new file mode 100644 index 00000000..aa2e5dad --- /dev/null +++ b/apps/node/README.md @@ -0,0 +1,21 @@ +# Node.js + +Node.js是一个流行的服务器端运行环境,允许开发者构建动态和可扩展的Web应用程序和网络化软件。 + +## 主要功能: + +- **非阻塞I/O**:Node.js以其非阻塞、事件驱动的架构而闻名。这意味着它可以高效地处理大量并发连接,而无需等待一个操作完成后再进行下一个操作,这使其非常适合构建实时应用程序。 + +- **JavaScript**:Node.js使用JavaScript进行服务器端编程,通过允许开发者在应用程序的客户端和服务器端都使用相同的语言,简化了Web应用程序开发。 + +- **包管理**:Node.js拥有一个强大的包管理器,称为npm(Node Package Manager),它允许开发者轻松地安装、管理和共享代码库,从而加速开发过程。 + +- **跨平台**:Node.js可以在多种操作系统上运行,包括Windows、Linux和macOS,这使其非常灵活,能够满足不同的部署需求。 + +- **事件驱动**:Node.js基于事件驱动的编程模型,开发者可以轻松地监听和响应事件,使其特别适合构建实时、交互式的应用程序。 + +- **模块化**:Node.js支持模块化编程,使开发者能够将代码分成小块,提高了可维护性和可扩展性。 + +- **社区支持**:Node.js拥有一个庞大的开发者社区,因此可以轻松找到各种模块和库来扩展其功能,也能够获得社区的支持和反馈。 + +- **单线程**:Node.js通常运行在单线程中,但通过事件循环机制和异步操作,能够实现高效的并发处理,同时减少了多线程开发时可能出现的问题。 \ No newline at end of file diff --git a/apps/node/data.yml b/apps/node/data.yml new file mode 100644 index 00000000..39a8a2c8 --- /dev/null +++ b/apps/node/data.yml @@ -0,0 +1,19 @@ +name: Node.js +tags: + - 运行环境 +title: Node.js 运行环境 +type: 运行环境 +description: Node.js 运行环境 +additionalProperties: + key: node + name: Node.js + tags: + - Runtime + shortDescZh: Node.js 运行环境 + shortDescEn: Node.js Runtime + type: node + crossVersionUpdate: false + limit: 0 + recommend: 101 + website: https://nodejs.org/en + github: https://github.com/nodejs diff --git a/apps/node/logo.png b/apps/node/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..10bbb7e5893ee7b8ac2717eaf67f98e7da7ff8ba GIT binary patch literal 7710 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 Y59*@8n{7{QMF0Q*07*qoM6N<$f@QK9A^-pY literal 0 KcmV+b0RR6000031