Node.js是一个基于Chrome V8 JavaScript引擎构建的开源、跨平台的JavaScript运行时环境。它允许开发者使用JavaScript在服务器端运行代码,而不仅限于在浏览器中运行。
输入网址 >> https://nodejs.org/zh-cn >> 18.16.1 LTS Recommended For Most Users
双击 >> node-v18.16.1-x64.msi >> 一直选择Next >> OK
查看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是一个用于自动化浏览器操作的开源工具集,它提供了一组简单、可靠和跨平台的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是一个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 文件里
{
"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")
一个漂亮的计算器:
下载案例源码>>
下载包 cnpm insall
开发模式 npm run dev
正常启动 npm start
浏览器访问 npm run serve
打包软件 npm run build
{
"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"
}
}
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);
//批量异步下载图片
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);
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();