第三方工具库
Node.js/NPM 管理
nvm 管理 Node.js 版本
nvmopen in new window,即 Node Version Manager,可以管理多个 Node.js 版本。
# 下载、编译、安装最新的 Node 的 release 版本,其中 node 是最新版本的别名
nvm install node
# 安装指定版本的 Node
nvm install 6.14.4
# 列出(远程)所有可用的版本
nvm ls-remote
# 列出本地安装的所有版本
nvm ls
# 使用特定版本
nvm use xxx
# 设置默认的 Node 版本
nvm alias default vxx.yy.zz
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nrm 管理 NPM registry
nrmopen in new window,即 NPM registry manager,可以在各个 register 之间快速切换,比如npm
,cnpm
,taobao
等
➜ ~ nrm ls
npm ---- https://registry.npmjs.org/
cnpm --- http://r.cnpmjs.org/
taobao - https://registry.npm.taobao.org/
nj ----- https://registry.nodejitsu.com/
rednpm - http://registry.mirror.cqupt.edu.cn/
npmMirror https://skimdb.npmjs.com/registry/
edunpm - http://registry.enpmjs.org/
* ks ----- https://npm.corp.kuaishou.com/
2
3
4
5
6
7
8
9
10
npx 调用局部安装的模块
npx
,主要解决调用项目局部安装的模块的问题。正常项目局部安装的模块比如vuepress
,只能在项目脚本和package.json
的scripts
字段里面才能调用命令vuepress dev
,若是想在命令行下调用,就必须像这样:
# 项目的根目录下执行
$ node-modules/.bin/vuepress dev
2
而npx
就是方便直接调用项目内部安装的模块:
npx vuepress dev
npx
的原理很简单,就是运行的时候,会到node_modules/.bin
路径和环境变量$PATH
里面,检查命令是否存在。
由于npx
会检查环境变量$PATH
,所以系统命令也可以调用。
# 等同于 ls
$ npx ls
2
Reference:
cross-env 跨平台设置环境变量
windows
和POSIX
命令行使用环境变量的方式是有差异的,对于POSIX
,是使用$ENV_VAR
;对于windows
,则使用%ENV_VAR%
。
cross-env
解决了跨平台设置和使用环境变量的问题,你只需要像在使用POSIX
系统时那样设置就行,cross-env
将帮你解决跨平台的问题。
# 安装
npm install --save-dev cross-env
2
// package.json
{
"scripts": {
"build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
}
}
2
3
4
5
6
监控文件变化
chokidar 监控文件变化
chokidaropen in new window,基于 Nodej.js 的fs.watch
/fs.watchFile
/fsevents
封装的watch
工具。
nodemon 监控文件变化重启应用
nodemon
open in new window可以在开发node.js
应用时,监控目录下的文件改变,并自动重启node.js
应用。
nodemon
不需要任何关于开发方法或代码上的修改,它是node
的封装,并代替了node
。使用nodemon
时,当执行脚本时,在命令行将原来的node
替换成nodemon
即可。
# 全局/局部安装
npm install -g nodemon
npm install --save-dev nodemon
# 启动应用,并默认监控当前工作目录下的文件改变(递归地)
nodemon ./server.js
# 启动应用,并监控 server 文件夹下的文件改变
nodemon server/index.js --watch server
2
3
4
5
6
7
8
9
// 方式二:该方式官网里直接说明结果的结构,因此如下阐述
var libs = require('require-all')(__dirname + '/lib');
2
假设lib
目录下的文件夹结构为:
- lib
- folder1
- file1-1.js
- file1-2.js
- folder2
- file2-1.js
- folder1
则通过方式二得到的libs
为:
{
folder1: {
file1-1: [Function: exports],
file1-2: [Function: exports]
},
folder2: {
file2-1: [Function: exports]
}
}
2
3
4
5
6
7
8
9
各个文件的结构为module.exports = function() {}
,以[Function: exports]
表示。
网络请求
axios-curlirize 将请求显示为 CURL
axios-curlirizeopen in new window,将 Node.js 里的axios
请求以 CURL 的形式打印出来。
koa 相关
koa2-connect
koa2-connectopen in new window,在 Koa v2 里使用 Express/Connect 的中间件。
koa-send、koa-static
koa-sendopen in new window,静态文件服务中间件。其核心实现方式是以fs.createReadStream
读取服务器本地文件返回给客户端。
koa-staticopen in new window,Koa 的静态文件服务中间,基于koa-send
封装。
koa-socket-2
koa-socket-2open in new window,Koa 里使用socket.io
的语法糖。
koa-json
koa-jsonopen in new window,将请求的响应结果(ctx.body
)按 JSON 格式美化的中间件,还支持将 Node 流对象转换为二进制。
koa-onerror
koa-onerroropen in new window,Koa 的错误处理,非中间件,可以在发生错误时根据请求的类型(比如html
/json
/text
)返回该类型的响应。该插件通过修改ctx
的原型app.context
上的onerror
方法给所有的ctx
实例重新设置onerror
方法。
app.context.onerror = function () {
// ...
}
2
3
注意,Koa 的app.context
上默认存在onerror
方法,该插件覆盖了默认的onerror
方法。
koa-bodyparser
koa-bodyparseropen in new window,Koa 的 body 解析中间件,解析后的数据存储在ctx.request.body
里。
koa-router
koa-views
koa-viewsopen in new window,模板渲染中间件,给定要请求的视图名称,传入数据,即可渲染出最终的模板字符串。
const path = require('path');
const views = require('koa-views');
const Koa = require('koa');
const app = module.exports = new Koa();
// 必须在任何路由中间件之前使用
app.use(views(
// 模板目录,必须是绝对路径,所有的视图都是基于此路径
path.join(__dirname, '/views'),
{
// 视图的默认扩展名
extension: 'ejs'
}
));
const user = {
name: {
first: 'Tobi',
last: 'Holowaychuk'
},
species: 'ferret',
age: 3
};
app.use(async function(ctx) {
// 渲染 user 视图,默认扩展名是 ejs,参数是 { user }
await ctx.render('user', { user });
});
if (!module.parent) app.listen(3000);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- user.ejs -->
<p><%= user.name.first %> is a <%= user.age %> year old <%= user.species %>.</p>
2
koa-proxy
koa-proxyopen in new window,是koa
的代理中间件,主要是将请求代理到其他服务器上。
koa-logger
koa-loggeropen in new window,koa
开发风格的日志中间件。这个中间件应该尽可能靠前放置,以便可以记录下所有的请求和响应。
library 里常用的工具库
Inquirer.js
Inquirer.jsopen in new window,常用的交互式命令行 UI 集合,主要用于在命令行里让用户以交互式的方式选择/输入所需的数据。
Commander.js
Commander.jsopen in new window,完整的 Node.js 命令行解决方案,定义命令、选项,根据用户输入的命令执行操作。使用该库,可以定义一套命令及对应的功能。
其他
require-all
require-all
open in new window,require
整个目录里的所有文件。
// 方式一:该方式可直接看官网示例,有详细说明
var controllers = require('require-all')({
dirname : __dirname + '/controllers',
filter : /(.+Controller)\.js$/,
excludeDirs : /^\.(git|svn)$/,
recursive : true
});
2
3
4
5
6
7
etag
etagopen in new window,创建简单的 ETags。
depcheck
depcheckopen in new window ,分析项目里的依赖,查看每个依赖是否使用到,缺少哪些依赖。