目前支持以下几类依赖包管理

官网文档==>package.json doc

  • dependencies依赖关系在一个简单的对象中指定,该对象将程序包名称映射到版本范围。
    • npm i is-odd -s/-S/--save写成不识别的-d/-A/-B/-C等会默认为--save
  • devDependencies该脚本将在发布之前运行,因此用户可以使用该功能而无需他们自己对其进行编译。
    • npm i is-odd -D/--save-dev
  • peerDependencies/peerDependenciesMeta
  • optionalDependenciesdependencies对象一样。区别在于构建失败不会导致安装失败。运行npm install --no-optional将阻止安装这些依赖项。
    • npm i is-odd -O/--save-option
  • bundledDependencies/bundleDependencies

依赖关系的指定版本范围

官网文档==>semver

  • version必须version完全匹配
  • >version 必须大于 version
  • >=version 等等
  • <version
  • <=version
  • ~version“大约等效于版本”请参考semver
  • ^version“与版本兼容”请参考semver
  • 1.2.x 1.2.0、1.2.1等,但不是1.3.0
  • http://...URL作为依赖项
  • *匹配任何版本
  • "" (只是一个空字符串)等价于*
  • version1 - version2与相同>=version1 <=version2
  • range1 range2 如果满足range1range2,则通过。
  • git...Git URL作为依赖项
  • user/repoGitHub URL作为依赖项
  • tag标记并发布为tag See的特定版本npm dist-tag
  • path/path/path本地路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"dependencies": {
"foo": "1.0.0 - 2.9999.9999",
"bar": ">=1.0.2 <2.1.2",
"baz": ">1.0.2 <=2.3.4",
"boo": "2.0.1",
"qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
"asd": "http://asdf.com/asdf.tar.gz",
"til": "~1.2",
"elf": "~1.2.3",
"two": "2.x",
"thr": "3.3.x",
"lat": "latest",
"dyl": "file:../dyl"
}
}

常用命令整理

官网总共有58个命令,下面整理了部分==>v7版本文档

  • npm -v查看版本
  • npm version查看所有模块的版本
  • npm search [name]搜索包
  • npm install/i下载当前项目所依赖的包
  • npm install/i --force覆盖安装
  • npm install/i [name]安装包
  • npm install/i [name] -g全局安装模块包
  • npm install --save echarts@4.3.0安装带版本号
  • npm list查看依赖包
  • npm remove/r [name]删除包(仅删除)
  • npm remove/r [name] -S删除包和package.json里面的模块名
  • npm remove -g cxvh-cli-test移除包
  • npm uninstall -g cxvh-cli-test删除模块(remove也可以,只是官网找不到相关文档)
  • npm unlink test需要加上包名test
  • npm config get registry查看镜像地址,默认为https://registry.npmjs.org/
  • npm config set registry https://registry.npm.taobao.org设置镜像
  • npm config set @types:registry https://registry.npmjs.org/据说这样也可以
  • npm install -g cnpm --registry=https://registry.npm.taobao.org使用淘宝镜像安装依赖
  • npm install -g npm更新npm版本
  • npm config set prefix "D:\nodejs\npm_global"设置全局依赖包位置
  • npm config get prefix
  • npm config set cache "D:\nodejs\npm_cache"设置缓存
  • npm config get cache
  • npm init初始化
  • npm login --registry=https://npm.pkg.github.com/登录
  • npm config list查看是否为registry = "https://registry.npmjs.org/"
  • npm set registry https://registry.npmjs.org/改为官方镜像地址
  • npm adduser增加npm用户(会输入登录名密码和邮箱,邮箱必须验证过的)
  • npm whoami查看当前npm用户名(没登录会报错)
  • npm link功能:1.生成全局命令;2.相当于npm install;3.后面可以接本地包路径。
  • npm publish发布
1
2
3
# http://registry.npmjs.org
# https://registry.npm.taobao.org
# https://npm.pkg.github.com/

常用包

  • compression字面意思压缩,中间件app.use(compression)放在所有请求前面即可
  • lodash是个工具库,里面工具的算法写的很好
  • cross-env运行跨平台设置和使用环境变量的脚本
  • svg-captcha在node.js中生成svg验证码
  • nodemailer从Node.js发送电子邮件-简单如蛋糕!
  • moment一个JavaScript日期库,用于解析,验证,操作和格式化日期。
  • npm-run-all一个CLI工具,可并行或顺序运行多个npm脚本。
  • npm-check-updates检查npm版本,将package.json依赖项升级到最新版本,而忽略指定的版本。(需要全局安装)
  • nrm切换镜像源
  • sinopia专用/缓存npm存储库服务器

koa 相关

  • koanode.js的下一代Web框架
  • koa-routerKoa的路由器中间件。
  • koa-body功能齐全的koa正文解析器中间件。支持multipart,urlencoded和json请求机构。提供与Express的bodyParser-相同的功能multer。
  • koa-jsonJSON精美打印的响应中间件。还将节点对象流转换为二进制。
  • @koa/corsKOA的跨域资源共享(CORS)
  • koa-helmet安全头
  • koa-compose整合 KOA 的中间件
  • koa-compress压缩Koa中间件
  • koa-jwt用于验证JSON Web令牌的Koa中间件。
  • jsonwebtokenJSON Web令牌签名和验证。

webpack 相关

  • webpack-merge为Webpack设计的合并
  • terser-webpack-plugin该插件使用terser来缩小JavaScript(webpack5 自带不用安装)
  • copy-webpack-plugin将单个文件或整个目录(已存在)复制到构建目录。

sql

  • mongoose是设计用于异步环境的MongoDB对象建模工具。Mongoose 支持 promises 和回调。

脚手架相关

  • import-local允许全局安装的软件包使用自身的本地安装版本
  • yargs通过解析参数并生成优雅的用户界面来帮助您构建交互式命令行工具
  • lerna基于git+npm的多package项目管理工具
  • npmlog打印日志用的
  • semver版本号比对
  • colors打印日志颜色
  • root-check1.检查root权限 2.如果是则降级进程的权限 3.如果降级失败则阻止访问
  • user-home获取用户主目录的路径
  • path-exists检查路径是否存在
  • minimist解析参数选项
  • dotenv环境变量设置
  • url-join将所有参数连接在一起并规范化结果url
  • commander node.js命令行界面的完整解决方案。
  • npminstall让我们npm install轻松快捷。
  • fs-extra添加本机fs模块中未包含的文件系统方法,并为这些fs方法添加promise支持。它还graceful-fs用于防止EMFILE错误。应该是的替代品fs

npm-run-all 配合 vscode 使用

package.json

1
2
3
4
5
6
7
{
"scripts": {
"watch": "eslint src/**/*.js && cross-env NODE_ENV=dev webpack --watch --progress --config config/webpack.config.dev.js",
"debug": "nodemon --inspect ./dist/server.bundle.js",
"start:dist": "npm-run-all -p watch debug",
}
}

launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"type": "node",
"request": "launch",
"name": "start-debug",
"runtimeExecutable": "npm",
"restart": true, // 重启
"console":"integratedTerminal", // 内部终端显示日志
"runtimeArgs": [
"run-script",
"start:dist" // 要执行的命令
],
"port": 9229,
"skipFiles": [
"<node_internals>/**"
]
}

按照上面配置和就可以在vscode调试打断点了

npm-check-updates 检查版本

1
2
3
4
5
6
7
8
# 安装
cnpm install -g npm-check-updates
# 检查版本
ncu
# 升级版本
ncu -u
# 检查全局软件包版本
ncu -g

更多参考npm-check-updates文档

使用nrm切换镜像源

  • npm i -g nrm全局安装
  • nrm ls查看源列表
  • nrm config get registry查看当前源地址
  • nrm use taobao切换淘宝源
  • nrm use cnpm切换cnpm
  • nrm use yarn切换yarn
  • nrm use npm切换npm
  • 安装后报错:internal/validators.js:124 throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
  • 这是找不到win的用户目录了,找到代码const NRMRC = path.join(process.env.HOME, '.nrmrc');改为const NRMRC = path.join(process.env.HOME||process.env.HOMEPATH, '.nrmrc');即可。
  • github仓库源码如下,感觉已经没人维护了
    1
    2
    const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');
    const NPMRC = path.join(process.env.HOME, '.npmrc');

error

npm install 报错:npm ERR! Maximum call stack size exceeded

使用淘宝镜像 npm install abc --registry=https://registry.npm.taobao.org or npm config set registry http://registry.npm.taobao.org/

gitbook 报错:node_modules\_npm@5.1.0@npm\node_modules\graceful-fs\polyfills.js:287

切换 node 版本为 10.21.0

npm login报错

1
2
3
4
5
6
7
8
9
10
11
npm ERR! code ETIMEDOUT
npm ERR! errno ETIMEDOUT
npm ERR! network request to http://r.cnpmjs.org/-/v1/login failed, reason: connect ETIMEDOUT 47.241.4.205:80
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly. See: 'npm help config'

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Baran.Lee\AppData\Roaming\npm-cache\_logs\2021-01-08T02_38_03_888Z-debug.log

npm config get registry