node笔记三之基本内置模块

278 阅读3分钟
  1. os模块
const os = require("os");

//操作系统特定的行结束标记。
console.log(os.EOL);

//返回为其编译Node.js二进制文件的操作系统CPU体系结构。可能的值为“arm”、“arm64”、“ia32”、“mips”、“mipsel”、“ppc”、“ppc64”、“s390”、“s390x”、“x32”和“x64”。
console.log(os.arch());

// CPU的个数
console.log(os.cpus().length); // 8

//以整数形式返回可用系统内存量(以字节为单位)。
console.log(os.freemem());

//返回当前用户主目录的字符串路径。
console.log(os.homedir()); // /Users/fuxing

//以字符串形式返回操作系统的主机名。
console.log(os.hostname()); // fuxingdeMacBook-Pro.local

//以字符串形式返回临时文件的操作系统默认目录。
console.log(os.tmpdir()); // /var/folders/dn/c54d7cqd2gscfn61khs9mdfm0000gn/T

  1. path模块
const path = require("path");

// 返回路径的最后一部分
const basename = path.basename("fdg/dfgdfg/adfaf/fdgdfgd/a.html", ".html"); //a
console.log(basename);
const basename2 = path.basename("fdg/dfgdfg/adfaf/fdgdfgd/a.html"); //a.html
console.log(basename2);

//提供特定于平台的路径段分隔符: \ on Windows    / on POSIX
console.log(path.sep); // /

//提供特定于平台的路径分隔符: ; for Windows    : for POSIX
console.log(process.env.PATH.split(path.delimiter));

// path.dirname返回路径的目录名
const dir = path.dirname("a/b/c/d");
console.log(dir);
/**
 [
  '/Users/fuxing/.nvm/versions/node/v18.13.0/bin',
  '/Library/Frameworks/Python.framework/Versions/3.11/bin',
  '/opt/homebrew/bin',
  '/opt/homebrew/sbin',
  '/usr/local/bin',
  '/usr/bin',
  '/bin',
  '/usr/sbin',
  '/sbin'
]
 */

// 返回文件的后缀, 包含.
const ext1 = path.extname("a/b/c/a.js"); // .js
let ext2 = path.extname("index.html"); // .html
let ext3 = path.extname("../abc/bcd/index.html?id=123"); // .html?id=123
let ext4 = path.extname("../abc/bcd/aa.bb.cc.html"); // .html
let ext5 = path.extname("../abc/bcd/aa"); // 返回’‘

console.log(ext1);
console.log(ext2);
console.log(ext3);
console.log(ext4);
console.log(ext5, ext5 === ""); //true

//path.join 将所有给定的路径段连接在一起,然后对生成的路径进行规范化。
console.log(path.join("/foo", "bar", "baz/asdf", "quux", "..")); ///foo/bar/baz/asdf
const basePath = "a/b";
const fullpath = path.join(basePath, "../", "d.js");
console.log(fullpath); //a/d.js

// 返回相对于第一个路径的相当位置
const rel = path.relative("/data/orandea/test/aaa", "/data/orandea/impl/bbb");
console.log(rel); // ../../impl/bbb

const absPath = path.resolve(__dirname, "./a.js");
console.log(absPath); // /Users/fuxing/Desktop/project/code/web/node/node_xuexi/deme003/a.js
console.log(path.resolve("/foo/bar", "./baz")); // /foo/bar/baz
console.log(path.resolve("/foo/bar", "/tmp/file/")); // /tmp/file
// /Users/fuxing/Desktop/project/code/web/node/wwwroot/static_files/gif/image.gif
console.log(path.resolve("wwwroot", "static_files/png/", "../gif/image.gif"));

console.log("=====================================");

// 1、不带参数时
// path.resolve()返回的是当前的文件的绝对路径/Users/xxxx/
// 2、带不是/开头的参数
// path.resolve('a') 返回的是当前绝对路径拼接现在的参数/Users/xxxx/a
// path.resolve('a','b') 返回的是当前绝对路径拼接现在的参数/Users/xxxx/a/b
// 3、带./开头的参数
// path.resolve('./a') 返回的是当前绝对路径拼接现在的参数/Users/xxxx/a
// path.resolve('./a','./b') 返回的是当前绝对路径拼接现在的参数/Users/xxxx/a/b
// 4、带/开头的参数 返回的是 /+‘最后一个前面加/的文件文件名’+‘剩下文件夹
// path.resolve('/a') 返回的是当前绝对路径拼接现在的参数/a
// path.resolve('/a','/b') 返回的是当前绝对路径拼接现在的参数/b
// path.resolve('/a','/b', 'c') 返回的是当前绝对路径拼接现在的参数/b/c

console.log(path.resolve()); // /Users/fuxing/Desktop/project/code/web/node
console.log(path.resolve("")); // /Users/fuxing/Desktop/project/code/web/node
console.log(path.resolve(".")); // /Users/fuxing/Desktop/project/code/web/node
console.log(path.resolve(__dirname)); // /Users/fuxing/Desktop/project/code/web/node/node_xuexi/deme003
console.log(path.resolve("js/common", "test")); // /Users/fuxing/Desktop/project/code/web/node/js/common/test
console.log(path.resolve("./js/common", "test")); // /Users/fuxing/Desktop/project/code/web/node/js/common/test
console.log(path.resolve("js/common", "./test")); // /Users/fuxing/Desktop/project/code/web/node/js/common/test
console.log(path.resolve("./js/common", "./test")); // /Users/fuxing/Desktop/project/code/web/node/js/common/test
console.log(path.resolve("/js/common", "test")); // /js/common/test
console.log(path.resolve("js/common", "/test")); // /test
console.log(path.resolve("/js/common", "/test")); // /test
console.log(path.resolve("/js/common", "../test")); // /js/test
console.log(path.resolve("js/common", "../test")); // /Users/fuxing/Desktop/project/code/web/node/js/test

``

3. url

```js
const url = new URL("https://nodejs.org:80/a/b/c?t=3&u=5#abc");
console.log(url);
console.log(url.searchParams.has("a")); // false
console.log(url.searchParams.has("t")); // true
console.log(url.searchParams.get("t")); // 3
  1. util
const util = require("util");

async function delay(duration = 1000) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(duration);
    }, duration);
  });
}
const delayCallback = util.callbackify(delay);
delayCallback(1000, (err, d) => {
  console.log(d);
});

/////////////////////////

function delayCallBack(duration, callback) {
  setTimeout(() => {
    callback(null, duration);
  }, duration);
}
const delay = util.promisify(delayCallBack);
(async () => {
  const r = await delay(500);
  console.log(r);
})();

/////////////////////////////
const obj1 = {
  a: 1,
  b: {
    c: 3,
    d: {
      e: 5,
    },
  },
};

const obj2 = {
  a: 1,
  b: {
    c: 3,
    d: {
      e: 5,
      //   g: 6,
    },
  },
};

console.log(util.isDeepStrictEqual(obj1, obj2));