-

Node.js下载安装使用教程(图文教程)

Node.js是一个基于Chrome V8 JavaScript引擎构建的开源、跨平台的JavaScript运行时环境。它允许开发者使用JavaScript在服务器端运行代码,而不仅限于在浏览器中运行。

Node.js下载

输入网址 >> https://nodejs.org/zh-cn >> 18.16.1 LTS Recommended For Most Users

Node.js安装

双击 >> node-v18.16.1-x64.msi >> 一直选择Next >> OK

Node.js配置

查看Node.js版本号 cmd >> node -v
npm config set registry https://registry.npm.taobao.org/ 换淘宝源
npm config set registry https://registry.npmjs.org/ 换官网源
npm config get registry 查看源

npm install -g express-generator
express -h 查版帮助详细
express -e myapp2 创建egs模板

playwright安装使用

Playwright是一个用于自动化浏览器操作的开源工具集,它提供了一组简单、可靠和跨平台的API,使得开发者能够以编程方式与浏览器进行交互。
安装:cmd >> npm init playwright@latest
或 cnpm init playwright@latest 速度快
查看playwright版本号:cmd >> playwright --version
运行测试:cmd >> npx playwright test

playwright官网 https://playwright.dev/docs/intro 安装: cmd >> cnpm init playwright@latest 查看版本:cmd >> playwright --version npx playwright test #运行指定目录测试
npx playwright test --project=chromium #指定运行浏览器
npx playwright test example #运行特定文件中的用例
npx playwright test --debug #debug模式运行测试
npx playwright test codegen #启动录制脚本

pkg打包node应用成exe文件

pkg是一个npm包,可以用来打包node应用为可执行文件
安装:npm install -g pkg
生成exe:pkg ./

第二种打包:
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple 打包库
pyinstaller -D app.py 打包
pip freeze > requirements.txt 获得本地全部库列表,保存到 requirements.txt 文件里

package.json 文件内容

{
  "name": "my-app",
  "version": "1.0.0",
  "bin": "index.js",
  "pkg": {
    "scripts": "index.js",
    "targets": [
      "node14-win-x64"
    ]
  }
}
        
index.js 文件内容

console.log("Hello, World!");
console.log("xiyueta.com")
        
Electron生成exe
Electron 是一个强大的开源框架,它允许开发者使用 Web 技术(如 HTML、CSS 和 JavaScript)来创建跨平台的桌面应用程序

一个漂亮的计算器: 下载案例源码>>


下载包 cnpm insall 开发模式 npm run dev 正常启动 npm start 浏览器访问 npm run serve 打包软件 npm run build

package.json 文件内容

{
  "name": "my-electron-app",
  "version": "1.0.0",
  "description": "一个使用 Electron 和 Express 的简单应用",
  "author": "Your Name",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "build": "electron-builder",
    "dev": "electron . --dev",
    "serve": "node server.js"
  },
  "build": {
    "appId": "com.example.app",
    "productName": "My Electron App",
    "win": {
      "target": "nsis",
      "icon": "assets/icon.ico"
    }
  },
  "devDependencies": {
    "electron": "^22.0.0",
    "electron-builder": "^23.6.0"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}
        
批量异步下载
nodejs写个批量下载图片,图片地址有http和https
const fs = require('fs');
const http = require('http');
const https = require('https');

// 图片URL地址列表(包括HTTP和HTTPS)
const imageUrlList = [
  'http://xiyueta.com/images/qqface/1.png',
  'https://www.xiyueta.com/images/qqface/2.png',
  'http://xiyueta.com/images/qqface/3.png',
  'https://www.xiyueta.com/images/qqface/4.png',
];

// 下载图片的函数
const downloadImage = (url, dest) => {
  return new Promise((resolve, reject) => {
    const protocol = url.startsWith('https') ? https : http;
    const file = fs.createWriteStream(dest);
    
    protocol.get(url, (response) => {
      response.pipe(file);
      
      file.on('finish', () => {
        file.close(resolve);
      });
    }).on('error', (err) => {
      fs.unlink(dest);
      reject(err);
    });
  });
};

// 创建保存图片的目录(如果不存在)
const createDirectory = (dir) => {
  if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir);
  }
};

// 批量下载图片
const batchDownloadImages = (imageUrlList, destDirectory) => {
  createDirectory(destDirectory);
  
  const downloadPromises = imageUrlList.map((url, index) => {
    const dest = `${destDirectory}/xiyueta-${index + 1}.jpg`;
    return downloadImage(url, dest);
  });
  
  Promise.all(downloadPromises)
    .then(() => {
      console.log('图片下载完成!');
    })
    .catch((err) => {
      console.error('图片下载失败:', err);
    });
};

// 设置保存图片的目录
const destDirectory = './xiyueta-images';

// 执行批量下载图片
batchDownloadImages(imageUrlList, destDirectory);
        

批量下载文件,并处理html文件,使用xiyuet.js库解析html内容

//批量异步下载图片
const fs = require('fs');
const http = require('http');
const https = require('https');
const md5 = require('md5');
const xiyueta = require('xiyueta');

// 图片URL地址列表(包括HTTP和HTTPS)
const imageUrlList = [
    'http://xiyueta.com/images/qqface/1.png',
    'https://www.xiyueta.com/images/qqface/2.png',
    'http://xiyueta.com/images/qqface/3.png',
    'https://www.xiyueta.com/images/qqface/4.png',
    'https://www.xiyueta.com/',
];

// 下载文件的函数
const downloadFile = (url, dest) => {
    return new Promise((resolve, reject) => { 
      //检测文件是否存在
        fs.access(dest, (err) => {
            if (err) {//不存在则下载
                const protocol = url.startsWith('https') ? https : http;
                const file = fs.createWriteStream(dest);
                protocol.get(url, (response) => {
                    response.pipe(file);
                    file.on('finish', () => {
                        handleFileHtml(url, dest)
                        file.close(resolve);
                    });
                }).on('error', (err) => {
                    fs.unlink(dest);
                    reject(err);
                });

            } else {
                console.log('文件存在!');
                handleFileHtml(url, dest)
            }
        });
    });

};

const handleFileHtml = (url, dest) => {
    return new Promise((resolve, reject) => {
        var ext = xiyueta.getFileExt(url)
        console.log(url, "文件后缀", ext)
        //处理html
        if (ext == "" || ",html,htm,asp,php,jsp,aspx,".indexOf("," + ext + ",") != -1) {
            fs.readFile(dest, 'utf-8', (err, data) => {
                if (err) {
                    console.error(err);
                } else {
                    // console.log(data);
                    xiyueta.load(data)
                    console.log("html a", xiyueta("a").length, dest)
                }
            });
        }
    });
};

// 创建保存图片的目录(如果不存在)
const createDirectory = (dir) => {
    if (!fs.existsSync(dir)) {
        fs.mkdirSync(dir);
    }
};

// 批量处理下载
const batchHandleDownload = (imageUrlList, destDirectory) => {
    createDirectory(destDirectory);

    const downloadPromises = imageUrlList.map((url, index) => {
        const dest = `${destDirectory}/${md5(index + 1)}.txt`;
        return downloadFile(url, dest);
    });

    Promise.all(downloadPromises)
        .then(() => {
            console.log('图片下载完成!');
        })
        .catch((err) => {
            console.error('图片下载失败:', err);
        });
};

// 设置保存图片的目录
const destDirectory = './data';

// 批量处理下载
batchHandleDownload(imageUrlList, destDirectory);
 
segment智能聊天 cnpm install readline
cnpm install segment
1.js文件内容
const readline = require('readline');
const { Segment } = require('segment');

// 创建读取用户输入的接口
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

// 创建分词器
const segment = new Segment();

// 使用默认的识别模块和字典
segment.useDefault();

// 定义对话训练集
const trainingData = {
  '你好': '你好,请问有什么可以帮到您的?',
  '下雨': '天气预报显示明天有可能下雨。',
  '做饭': '很抱歉,我是一个聊天机器人,不具备做饭的能力。',
  '谢谢': '不客气,如果还有其他问题请随时提问。'
};

// 处理用户输入的函数
function processInput(input) {
  // 分词
  const result = segment.doSegment(input, {
    simple: true
  });
console.log("result",result)
  // 根据分词结果处理答案
  if (result.includes('你好')) {
    return trainingData['你好'];
  } else if (result.includes('下雨')) {
    return trainingData['下雨'];
  } else if (result.includes('做饭')) {
    return trainingData['做饭'];
  } else if (result.includes('谢谢')) {
    return trainingData['谢谢'];
  } else {
    return '抱歉,我不明白您的意思,请重新输入。';
  }
}

// 读取用户输入,并进行处理
function chat() {
  rl.question('您想对我说点什么?', (input) => {
    const response = processInput(input);
    console.log(response);
    chat(); // 继续监听用户输入
  });
}

// 启动对话
chat();