node.js 是一个开源的,跨平台的 JavaScript 运行环境
node 文件.js
npm i nodemon -g
nodemon 文件名
node 中顶级对象为 global ,也可以使用 globalThis 访问顶级对象
__dirname
当前文件夹目录console.log(__dirname); // `D:\node\src`
__filename
当前文件位置console.log(__filename); // 'D:\node\src\fs.js'
它用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口。
用来创建一个专门存放二进制数据的缓存区
const buf1 = Buffer.alloc(10);
const buf2 = Buffer.allocUnsafe(10);
const buf3 = Buffer.from([1, 2, 3]);
const buf4 = Buffer.from("tést");
const buf5 = Buffer.from("tést", "latin1");
buf.toJSON();
buf.toString();
fs.writeFile(file, data[, options], callback)
参数
flag
Flag | 描述 |
---|---|
r | 以读取模式打开文件。如果文件不存在抛出异常。 |
w | 以写入模式打开文件,如果文件不存在则创建。 |
a | 以追加模式打开文件,如果文件不存在则创建。 |
… | … |
const fs = require("fs");
fs.writeFile("./test.txt", "xr", (err) => {
// err 错误对象 成功 为 null
if (err) return console.log("写入失败", err);
console.log("写入成功");
});
fs.writeFileSync("./test.txt", "writeFileSync");
\r\n
写入换行
fs.appendFile("./test.txt", "\r\n追加appendFile", (err) => {
if (err) return console.log("追加失败", err);
console.log("追加成功");
});
fs.appendFileSync("./test.txt", "append");
fs.readFile("./test.txt", (err, data) => {
if (err) return console.log("读取失败", err);
// data 是一个 Buffer
// 使用 toString 方法,把 Buffer 转换为字符串
console.log(data.toString());
});
const data = fs.readFileSync("./test.txt");
fs.rename("./test.txt", "./testrename.txt", (err) => {
if (err) return console.log("重命名失败", err);
console.log("成功");
});
fs.unlink("./testrename.txt", (err) => {
if (err) return console.log("删除失败", err);
console.log("成功");
});
fs.rm("./test2.txt", (err) => {
if (err) return console.log("删除失败", err);
console.log("成功");
});
Stream 有四种流类型:
Stream 常用的事件:
写入流 createWriteStream
// 创建写入流对象
const ws = fs.createWriteStream("./test.txt");
// 写
ws.write("createWriteStream\n");
ws.write("createWriteStream");
// 关闭通道,可不写
wx.close();
读取流 createReadStream
const rs = fs.createReadStream("./test.txt");
rs.on("data", (chunk) => {
// chunk 读取的数据流,分段读取
console.log(chunk);
});
rs.on("end", () => {
console.log("读取完成");
});
流式操作
const rs = fs.createReadStream("./test.txt");
const ws = fs.createWriteStream("./test2.txt");
rs.on("data", (chunk) => {
wx.write(chunk);
});
fs.mkdir("./view", (err) => {
if (err) return console.log("创建失败", err);
console.log("成功");
});
递归创建文件夹
fs.mkdir("./pages/login", { recursive: true }, (err) => {
if (err) return console.log("创建失败", err);
console.log("成功");
});
fs.readdir("./", (err, files) => {
if (err) return console.log("读取失败", err);
// files 文件夹/文件列表
console.log("成功", files);
});
fs.rmdir("./pages", (err) => {
if (err) return console.log("删除失败", err);
console.log("成功");
});
递归删除文件夹 rmdir rm
fs.rm("./pages", { recursive: true }, (err) => {
if (err) return console.log("删除失败", err);
console.log("成功");
});
fs.stat("./test.txt", (err, data) => {
if (err) return console.log(err);
console.log(`是文件${data.isFile()}`); // 返回布尔值
console.log(`是文件${data.isDirectory()}`); // 返回布尔值
});
join
const path = require("path");
console.log(path.join("a", "b", "./c", "/d", "..", "e"));
console.log(path.join("a", "b", "./c", "../"));
console.log(path.join("a", "b", "./c", ".."));
.. 切换上一级目录
a\b\c\e
a\b\
a\b
basename
const path = require("path");
const fpath = "a/b.js";
console.log(path.basename(fpath));
console.log(path.basename(fpath, ".js"));
b.js;
b;
extname
const path = require("path");
const fpath = "a/b.js";
console.log(path.extname(fpath));
.js
resolve
给定的路径序列是从右到左处理的 每个后续 path 路径都在前面,直到构造出绝对路径
如果没有 path 传递段,path.resolve()将返回当前工作目录的绝对路径
console.log(path.resolve("/a", "b", "/c"));
console.log(path.resolve("/a", "b", "c"));
D:\c
D:\a\b\c
// b.js 向外导出多个
exports.a = "aa";
exports.b = "bb";
// a.js 接收
let aExports = require("./b");
console.log(aExports); // 是个对象 { a: 'aa', b: 'bb' }
// b.js 向外导出多个还可以使用 module.exports
module.exports = {
a: "aa",
b() {
console.log("bb");
},
};
// a.js 接收
let aExports = require("./b");
console.log(aExports); // 是个对象 { a: 'aa', b: [Function: b] }
npm root -g
npm --version
npm -v
npm config list
npm config get registry
npm config set registry https://registry.npm.taobao.org
npm init
npm init -y
npm install dayjs -D --save-dev 开发环境
npm install dayjs -S --save 生产环境
npm install dayjs -g --global 全局安装
npm install [email protected]
npm uninstall dayjs
npm remove dayjs -g
npm update
nvm 是一个 nodejs 的版本管理工具
https://github.com/coreybutler/nvm-windows/releases
下载 nvm-setup.zip
nvm list [available]
nvm install 18.10.0
nvm use 18.10.0
nvm uninstall 18.10.0
nvm on
nvm off
在安装目录下 settings 文件中新增如下两行
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
nrm(npm registry manager )是 npm 的镜像源管理工具 快速地在 npm 源间切换
npm install -g nrm
nrm ls
nrm current
nrm use taobao
nrm add
registry 为源名,url 为源地址,nrm add aaa https://aaa.com
nrm del
nrm test
nrm test
nrm/cli.js
大约 211 行代码 把 && 改为 ||
if (
hasOwnProperty(customRegistries, name) &&
(name in registries || customRegistries[name].registry === registry.registry)
) {
registry[FIELD_IS_CURRENT] = true;
customRegistries[name] = registry;
}
修改如下
if (
hasOwnProperty(customRegistries, name) ||
name in registries ||
customRegistries[name].registry === registry.registry
) {
registry[FIELD_IS_CURRENT] = true;
customRegistries[name] = registry;
}
npx 是 npm5.2 之后发布的一个命令
针对 node_modules 目录下.bin 下的可执行文件,如果是项目安装而非全局安装,使用时会非常麻烦,npx 帮助解决这个问题
sequelize-cli 管理数据库
使用的时候需要这样子调用
./node_modules/.bin/sequelize-cli db:seed:all
使用 npx
npx sequelize-cli db:seed:all