本文内容
本文主要是一些示例代码,用来练习使用 node
参考:《node.js 硬实战》
1.安装与加载模块
问题
你想从 npm 加载一个第三方模块。
解决方案
从命令行工具 npm 安装模块,然后通过 require 加载模块,例如
$ npm search express
express Sinatra inspired web development framework
$ npm install express
npm WARN node_start@1.0.0 No description
npm WARN node_start@1.0.0 No repository field.
+ express@4.17.1
added 50 packages from 37 contributors and audited 128 packages in 9.79s
found 0 vulnerabilities
$ node
> var express = require('express');
> typeof express
'function'
- 通过关键字搜索模块
- 通过 require 加载模块
- 模块被安装在
./node_modules目录下 npm install -g 模块名将模块安装在全局目录下,linux 是/usr/local/lib
2.判断 node 加载了哪个模块 && 卸载模块
要判断 node 具体加载了哪个模块 ,可以通过 require. resolve(id),这将返回文件的绝对路径。
卸载模块:delete require('./circle.js');
3.加载一组相关的模块
问题
你希望将一个目录下的相关文件组合起来,而且只需要通过一个 require 来加载这些模块。
解决方案
创建一个叫作 index.js 的文件来加载各个模块并把它们一起导出,或者在文件夹下添加一个 package.json 文件。
module.exports = {
one: require('./one'),
two: require('./two'),
}
这样相当于一次加载了内部的两个模块
4.读取相对路径的文件
问题
有时候我们需要读取一些相对路径的文件
解决方案
通过 __dirname 和 __filename 来找到文件的位置,例如读取相对于本文件上层目录的 views/view.html
var view = __dirname + '/view/view.html'
这个实际上在 windows 和 linux 下都能跑过去,windows API 实际上是看得懂的,当然,如果要更标准的话,那么还是使用 path 模块,例如:
var path = require('path');
var view = path.join(__dirname, 'view', 'view.html');
console.log(view);
5.打印进程进度
有时候,我们可能需要进程定时打印 ... 来表示进程还在执行,用户体验会好一点。
setInterval(() => process.stdout.write('.'), 10).unref()
重点是最后的 unref() ,它表示 setInterval 返回的 Timeout 对象不需要 Node.js 事件循环保持活动状态。 如果没有其他活动保持事件循环运行,则进程可以在调用 Timeout 对象的回调之前退出。
如果没有最后的调用,那么进程在完成真正该干的事情后,就无法退出了,因为事件循环一直没有结束