-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
node 标准库常用语法 #77
Comments
path.join()与path.resolve()什么区别?一个demonstration就可以说明主要问题:
细心的你一定发现了,join返会的路径以分隔符"/"结尾,而resolve以目录名结尾。 这是在传入"../../"的情况下,那如果直接传入目录名呢?
path.join会始终保留路径原来的模样,预留一个空间。path.resolve会自动把多余的/去掉,从而保证是一个有效的目录。 因此我们可以做出总结:
path.join()主要用于规范化路径。
path.resolve()主要用于返回绝对路径。
关于path.join与path.resolve,部门老大刚才从源码角度带着我理解了一波,源码地址在这里:https://github.com/nodejs/node/blob/master/lib/path.js |
process.cwd()由上面的path.js源码拓展出一个process.cwd()的问题。 老大说:
由于工科男的执着,我们对上面的结论做两次实验: 普通实验
index.js
foo.js
bar.js
输出结果:
实验表明, 2019.7.31更新
这个cwd()指的是node进程的工作目录: PM2实验能力有限,未完待续。 |
fs.readFile()与fs.readFileSync()有什么区别?二者返回的结果都是目录下文件名数组,最为关键的地方在于Sync关键字。在nodejs中,有大量的*Sync类型的标准库api,就拿fs来说,就有下面这么多。
*Sync 类型的是同步函数,它们会立即返回一个值,而其它的是异步函数,返回的是undefined,但是可以接收一个callback去处理它们的响应。 拿fs.readFile与fs.readFileSync来说。
虽然同步的方式比较直观,但是对于在node进程同步读取文件的时候,进程处于阻塞状态,不能去做其它事情。而采用异步的方式是非常畅通的。 再来想个问题:为什么不把fs.readFile写成fs.readFileAsync,这样更直观啊? 因为在nodejs的场景中,会大量用到异步的场景,这也是node的优势所在,相比fs.readFileAsync,fs.readFile的写法更简洁,少写了5个字母,可以略微提升coding的速度。
|
os.cpus()的times返回数据的user mode,nice mode,sys mode,idle mode,irq mode是什么?Operating modesARM7TDMI操作模式
由此可见:
|
cryptoCrypto Modulecrypto模块提供了密码学加密函数集,包括OpenSSL的hash,HMAC,cipher(暗号),decipher(破译),sign(签名)以及认证函数。
核心方法:createHmac(algorithm, key ,[options])
crypto.createHmac()方法会创建一个Hmac实例。Hmac对象使用new操作符是实例不了的。
引申基础:
实践:
|
REPLrepl模块的全称是Read-Eval-Print-Loop(REPL),既可以独立使用也可以被其他应用程序使用。 const repl = require('repl'); 设计初衷
命令和特殊键下面的命令被REPL实例支持:
Last login: Mon Apr 29 11:35:27 on ttys001
frankdeiMac:~ frank$ node
> .editor
// Entering editor mode (^D to finish, ^C to cancel)
function welcome(name) {
return `Hello ${name}!`;
}
welcome('Node.js User');
'Hello Node.js User!'
> 下面的快捷键功能如下:
默认执行默认情况下,repl.REPLServer的所有实例会用一个执行函数执行js表达式并且允许调用nodejs内建模块的权限。这个默认行为可以通过传入一个可执行函数去覆盖。 js表达式frankdeiMac:~ frank$ node
> 1+1
2
> const m =2
undefined
> m+1
3
> 全局和本地作用域默认计算器赋权所有全局作用域中的变量。可以通过给REPLServer的context对象复制显式将变量暴露给REPL。 > .editor
// Entering editor mode (^D to finish, ^C to cancel)
const repl = require('repl');
const msg = 'message';
repl.start('> ').context.m = msg;
> 'message' 可以通过Object.defineProperty()设置属性为只读: Object.defineProperty(repl.start('> ').context, 'm', { enumerable: true, value: msg }); |
require.cache在写vscode插件的过程中,发现通过require获取到的文件是旧的,不能获取到最新的。 原因是cjs的require有缓存机制,因此可以通过下面这种方式去获取: // 避免require缓存
delete require.cache["/client/static/locales/zh/translation.json"];
const data = require("/client/static/locales/zh/translation.json");
|
标准库可以说是node的基础,非常重要。
The text was updated successfully, but these errors were encountered: