Nodejs 一个叫local-gradle-server的npm

Nodejs 一个叫local-gradle-server的npm

如何完成

gradle文件下载的问题

实际上自己下载https://services.gradle.org/distributions/gradle-2.2.1-all.zip文件,然后起一个http-server就可以很好的解决了

但是手贱,写了一下,发现其实想写好也不太容易

技术栈

  • request + fs.createWriteStream 完成下载
  • promisePipe提供了stream完成后的回调,解决了node异步导致的流程控制问题
  • request-progress 解决了下载进度查看的问题
  • open 在浏览器里打开地址
  • cliparoo 复制内容到剪贴板
  • shelljs 执行命令

相关url地址

用法

就不写了,在代码中,自己看吧,欢迎提交issue

https://github.com/i5ting/local-gradle-server


3 回复

如何完成

gradle文件下载的问题

实际上自己下载https://services.gradle.org/distributions/gradle-2.2.1-all.zip文件,然后起一个http-server就可以很好的解决了

但是手贱,写了一下,发现其实想写好也不太容易

技术栈

  • request + fs.createWriteStream 完成下载
  • promisePipe提供了stream完成后的回调,解决了node异步导致的流程控制问题
  • request-progress 解决了下载进度查看的问题
  • open 在浏览器里打开地址
  • cliparoo 复制内容到剪贴板
  • shelljs 执行命令

相关url地址

用法

就不写了,在代码中,自己看吧,欢迎提交issue

https://github.com/i5ting/local-gradle-server


Node.js: 使用 local-gradle-server npm 包

如何完成

在某些情况下,我们可能需要在本地环境中提供Gradle文件。这可以通过使用local-gradle-server npm包来实现。虽然直接下载并启动一个HTTP服务器可以解决问题,但编写一个专门用于此目的的Node.js应用更加灵活且易于维护。

技术栈

为了完成这个任务,我们使用了一些流行的Node.js库:

  • request + fs.createWriteStream: 用于从远程URL下载文件。
  • promise-pipe: 提供了一个处理流结束的Promise,从而简化了异步操作的流程控制。
  • request-progress: 提供了下载进度的实时反馈。
  • open: 在浏览器中打开指定的URL。
  • cliparoo: 将文本复制到剪贴板。
  • shelljs: 执行系统命令。

示例代码

const request = require('request');
const fs = require('fs');
const promisePipe = require('promise-pipe');
const requestProgress = require('request-progress');
const open = require('open');
const cliparoo = require('cliparoo');
const shell = require('shelljs');

// 下载Gradle文件
function downloadGradleFile(url, dest) {
    return new Promise((resolve, reject) => {
        const file = fs.createWriteStream(dest);
        const req = request(url);

        requestProgress(req, {})
            .on('progress', (state) => {
                console.log(`Downloaded ${Math.round(state.percent * 100)}%`);
            })
            .pipe(file);

        file.on('finish', () => resolve());
        file.on('error', (err) => {
            file.close();
            reject(err);
        });
    });
}

// 启动HTTP服务器
function startHttpServer(port, path) {
    const http = require('http');
    const server = http.createServer((req, res) => {
        if (req.url === '/') {
            res.writeHead(302, { Location: '/gradle-2.2.1-all.zip' });
            res.end();
        } else {
            res.sendFile(path);
        }
    });

    server.listen(port, () => {
        console.log(`HTTP Server running on port ${port}`);
        const url = `http://localhost:${port}/gradle-2.2.1-all.zip`;
        console.log(`You can download the file from ${url}`);
        cliparoo(url); // 复制下载链接到剪贴板
        open(url); // 自动打开浏览器
    });
}

// 主函数
async function main() {
    const url = 'https://services.gradle.org/distributions/gradle-2.2.1-all.zip';
    const dest = './gradle-2.2.1-all.zip';

    try {
        await downloadGradleFile(url, dest);
        console.log('Download completed!');
        startHttpServer(8080, dest);
    } catch (err) {
        console.error('Error:', err);
    }
}

main();

说明

  • downloadGradleFile: 这个函数负责从指定的URL下载文件,并通过request-progress显示下载进度。
  • startHttpServer: 这个函数启动一个HTTP服务器,监听指定端口,并将下载的文件作为资源提供。
  • main: 主函数,协调上述两个函数的执行,确保文件先下载再启动服务器。

通过这些步骤,我们可以轻松地创建一个本地的Gradle文件服务器,而无需手动下载和配置复杂的环境。

根据你的描述,你希望了解如何使用local-gradle-server npm包来解决Gradle文件下载的问题。这个项目提供了一种方式,通过Node.js来下载并提供Gradle文件的服务。以下是基于给定技术栈的实现示例:

示例代码

首先,确保你安装了所有必要的依赖:

npm install request fs promisepipe request-progress open cliparoo shelljs

接下来,创建一个简单的Node.js脚本来下载并提供Gradle文件:

const fs = require('fs');
const path = require('path');
const request = require('request');
const progress = require('request-progress');
const pipe = require('promisepipe');
const open = require('open');
const copyToClipboard = require('cliparoo');
const shell = require('shelljs');

// URL of the Gradle distribution
const gradleUrl = 'https://services.gradle.org/distributions/gradle-2.2.1-all.zip';
const outputPath = path.join(__dirname, 'gradle-2.2.1-all.zip');

// Download the file and track progress
progress(request(gradleUrl))
    .on('progress', (state) => {
        console.log(`Downloaded ${Math.round(state.percent * 100)}%`);
    })
    .pipe(fs.createWriteStream(outputPath))
    .on('close', async () => {
        // Serve the file using a simple HTTP server
        const http = require('http');
        const url = require('url');
        
        const server = http.createServer((req, res) => {
            if (req.url === '/gradle-2.2.1-all.zip') {
                res.setHeader('Content-Type', 'application/octet-stream');
                fs.createReadStream(outputPath).pipe(res);
            } else {
                res.writeHead(404);
                res.end();
            }
        });

        const port = 3000;
        server.listen(port, () => {
            console.log(`Server running at http://localhost:${port}/gradle-2.2.1-all.zip`);
            open(`http://localhost:${port}/gradle-2.2.1-all.zip`);
            copyToClipboard(`http://localhost:${port}/gradle-2.2.1-all.zip`);
            console.log('URL copied to clipboard.');
        });
    });

代码解释

  1. 依赖安装:首先,你需要安装相关的Node.js模块。
  2. 文件下载:使用requestrequest-progress来下载Gradle文件,并显示下载进度。
  3. 保存文件:将下载的文件保存到指定路径。
  4. HTTP服务器:使用Node.js的内置http模块创建一个简单的HTTP服务器,用于提供下载的文件。
  5. 打开浏览器和复制URL:使用opencliparoo模块自动在浏览器中打开文件链接,并将链接复制到剪贴板。

这只是一个基础示例,你可以根据实际需求进行扩展或优化。

回到顶部