学习视频 # node深入浅出教程
npm 常用命令
npm init [-y] // 初始化空项目
npm install [-D] [-g] [包名] // 装包
npm link // 软链接到全局
npm remove -g [包名] // 移除全局包
npm search [包名] // 到npmjs.org搜索包
npm view [包名] // 到npmjs.org查看包详情
npm publish . // 发布包到仓库
node 包
nodemon // 自动重启nodejs脚本
http
dns
querystring
url
fs
vue
vuex
vue-router
axios
react
react-dom
webpack
webpack-cli
html-webpack-plugin
mini-css-extract-plugin
clean-webpack-plugin
terser-webpack-plugin
css-minimizer-webpack-plugin
webpack-bundle-analyzer
webpack-dev-server
webpack-merge
cross-enb
webpack-server-renderer
lodash
@babel/core
@babel/preset-end
@babel/plugin-transform-plugin
@babel/polyfill
@babel/loader
prettier
husky
lint-staged
@commitlint/cli
@commitlint/config-conventional
stylelint
stylelint-config-standard
eslint
eslint-config-prettier
style-loader
css-loader
postcss
postcss-loader
sass
sass-loader
recast
jscodeshift
eslint-plugin-local-rules
http
const http = require("http");
const server = http.createServer(function (request, response) {
let data = "";
request.on("data", function (chunk) {
data += chunk;
});
request.on("end", function () {
console.log("end", data, request);
});
});
server.on("listening", function () {
console.log("server is listening");
});
server.on("connection", function () {
console.log("client is connected");
});
server.on("close", function () {
console.log("server is close");
});
server.listen(3000, function () {
console.log("server is start");
});
url
const url = require("url");
console.log(url.parse("http://www.baidu.com"));
console.log(
url.format({
protocol: "https",
hostname: "example.com",
pathname: "/some/path",
query: {
page: 1,
format: "json",
},
})
);
querystring
const querystring = require("querystring");
console.log(
querystring.stringify({
foo: "bar",
abc: ["xyz", "1234"],
})
);
console.log(querystring.parse('/login?userame=admin&password=123456'));
dns
const dns = require("dns");
dns.resolve("www.baidu.com", (error, address) => {
if (error) return console.error(error);
console.log("address", address);
});
dns.reverse("114.114.114.114", (error, domain) => {
if (error) return console.error(error);
console.log("domain", domain);
});
fs
fs.readFile('xxx.js','utf8') // 读取文件
fs.writeFile('xxx.js','xxxxxxxxxxxx','utf8') // 创建写文件
fs.appendFile('xxx.js','dd','utf8') // 追加文件内容
fs.rename('xxx.js','bbb.js',error=>{}) // 改名
fs.open // 打开文件
fs.unlink // 删除文件
fs.mkdir // 创建文件夹 recursive = true 多级目录可创建
fs.rm // 删除文件
fs.unlink // 删除文件
fs.readdir // 读取目录下所有文件包括子目录
fs.stat // 文件信息
fs.access // 判断文件是否存在
fs.realPath // 根据文件相对路径获得真实绝对路径
流读取
const readStream = fs.createReadStream("./package.json", { encoding: "utf8" });
readStream.on("open", (fd) => {
console.log(fd);
});
readStream.on("ready", () => {
console.log("ready");
});
readStream.on("data", (data) => {
console.log(data);
});
readStream.on("end", () => {
console.log("end");
});
readStream.on("close", () => {
console.log("close");
});
readStream.on("error", () => {
console.log("error");
});
写流文件
const writeStream = fs.createWriteStream("mytest.js", { encoding: "utf8" });
writeStream.write('xxxxx');
Buffer
const { Buffer } = require("buffer"); // buffer 里面是二进制,用整数数组表示
// 字节
const buffer = Buffer.alloc(128); // 128字节
const length = buffer.write("helloworld你好", "utf8");
console.log("buffer.length:" + length); // 16,utf8对应ascii码1个字节,中文3个字节
// 比较
const buffer1 = Buffer.from("hello");
const buffer2 = Buffer.from("world");
const compareResult = buffer1.compare(buffer2);
console.log("buffer compare:" + compareResult); // -1 因为字母h在w前,所以小于
// 赋值
const buffer3 = Buffer.alloc(3);
buffer3[0] = 65;
buffer3[1] = 66;
buffer3[2] = 67;
console.log(buffer3.toString("utf8")); // ABC 数字分别对应ascii码的ABC字母,默认utf8
// 字符串
const str = "abcd天";
const buffer4 = Buffer.from(str);
console.log(str.length, buffer4.length); // 5 7 字符串length是字符个数,buffer.length是返回字节数,buffer的中文是3个字节
console.log(buffer4); // <Buffer 61 62 63 64 e5 a4 a9>
// 多个buffer拼接
const buffer5 = Buffer.from("hello");
const buffer6 = Buffer.from("world");
const buffer7 = Buffer.from("你好");
const bufferArray = [buffer5, buffer6, buffer7];
const bufferLength = buffer5.length + buffer6.length + buffer7.length;
const bufferResult = Buffer.concat(bufferArray, bufferLength);
console.log(bufferResult.length); // 16
console.log(bufferResult.toString("utf8")); // helloworld你好
// string -> buffer -> json -> string
const { Buffer } = require("buffer");
const buffer8 = Buffer.from("你好世界");
const jsonString = JSON.stringify(buffer8);
console.log(jsonString); // {"type":"Buffer","data":[228,189,160,229,165,189,228,184,150,231,149,140]}
const jsonObject = JSON.parse(jsonString);
console.log(jsonObject);// {"type":"Buffer","data":[228,189,160,229,165,189,228,184,150,231,149,140]}
const buffer9 = Buffer.from(jsonObject);
console.log(buffer9.toString("utf8")); // 你好世界
// isBuffer
const buffer10 = Buffer.from("123");
console.log(Buffer.isBuffer(buffer10));// true
net
TCP \ socket 编程
创建 tcp server
// TCP \ socket
// 可以在linux中用 nc 127.0.0.1 8888 连接此服务端
const net = require("net");
const server = net.createServer((socket) => {
console.log("client connected");
server.maxConnections = 2; // 设置最大连接数,超过拒绝
server.getConnections((error, count) => {
if (error) return console.log(error);
console.log("client count", +count); // 当前连接数
});
socket.setEncoding("utf8"); // 默认收到data是Buffer
socket.on("data", (data) => {
console.log(data); // 收到客户端消息
console.log("从建立到现在一共读取的字节数", socket.bytesRead);
});
socket.write("发送给客户端", () => {
console.log("从建立到现在一共发送的字节数", socket.bytesWritten);
});
console.log("local port", socket.localPort);
console.log("local address", socket.localAddress);
console.log("remote port", socket.remotePort);
console.log("remote address", socket.remoteAddress);
console.log("remote family", socket.remoteFamily);
});
server.listen(8888, () => {
console.log("server is listening");
const address = server.address();
// 当前服务信息
console.log(address.port + "," + address.address + "," + address.family);
});
创建 tcp client
// TCP \ socket
const net = require("net");
const client = new net.Socket();
client.connect(8888, "127.0.0.1", () => {
console.log("connected to server");
});
client.setEncoding("utf-8");
client.on("data", (data) => {
console.log(data);
client.write("发送给服务器");
});
client.on("end", () => {
console.log("client end");
});
# udp/datagram
创建udp server
// udp server
const dgram = require("dgram");
const message = Buffer.from("来自服务端消息");
const socket = dgram.createSocket("udp4", (msg, info) => {
// 发送给info客户端
socket.send(
message, // 消息内容
0, // 内容偏移
message.length, // 内容长度
info.port, // 客户端端口
info.address, // 客户端地址
(error, bytes) => {
if (error) return console.log(error);
console.log("server has send " + bytes + "bytes message");
}
);
});
socket.bind(999, "localhost", () => {
console.log("server has bind to 999");
});
socket.on("message", (msg, info) => {
console.log("message event occured");
console.log(msg.toString("utf8"));
});
创建udp server
// udp client
const dgram = require("dgram");
const message = Buffer.from("this message from client");
const socket = dgram.createSocket("udp4");
socket.send(message, 0, message.length, 999, "localhost", (error, bytes) => {
if (error) return console.log(error);
console.log("clinet has send" + bytes.length + "bytes message");
});
socket.on("message", (msg, info) => {
console.log("client receive message" + msg.toString());
});