正文
npm参考手册
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
一 权限操作
npm允许通过scope组织私有包,通过team细化权限控制
npm官方仓储有两种类型的包,普通包和scope包
普通包特征: - 只能公有,谁都可以下载使用 - 仅可以通过所有者(owner)进行权限控制,如果要允许某个用户修改或发布包,必须将该用户添加到包的所有者列表。添加到包所有者列表的用户具备所有的权限.
scope包特征:
- 包名有两部组成,@scope/name, @后的为scope名,/后的才是具体的包名 - 可以控制公有和私有 - 细化的权限控制,比如可以创建团队,并赋予团队对包只读/修改的权限
1. owner
1 | npm owner add <user> [<@scope>/]<pkg> # 将用户添加到包的所有者列表 |
成为包的所有者的用户,将能够修改元数据(如标记弃用),发布新版本,添加其他用户到包的所有者列表
2. t/team
1 | npm team create <scope:team> # 创建团队 |
3. access
1 | npm access public [<package>] # 设置包开放 |
4. adduser/login
1 | npm adduser [--registry=url] [--scope=@orgname] [--always-auth] |
提示输入username, password, email,进行登录校验,返回token保存到.npmrc
5. logout
1 | npm logout [--registry=<url>] [--scope=<@scope>] |
请求仓储服务将当前token失效
6. whoami
1 | npm whoami [--registry <registry>] |
列出用户在npmjs.org上的用户名
二 远程操作1. s/se/search
1
npm search [-l|--long] [--json] [--parseable] [--no-description] [search terms ...]
- -l|–long: 展示出全部的DESCRIPTION栏信息
- –no-description: 不显示DESCRIPTION栏信息
2. publish
1
npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]
- –tag: 带上tag信息发布,之后包可以通过
npm install <name>@<tag>
安装 - –access: 仅适用于scope包,默认为restricted
3. unpublish
1
npm unpublish [<@scope>/]<pkg>[@<version>]
1 | npm search [-l|--long] [--json] [--parseable] [--no-description] [search terms ...] |
1 | npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>] |
npm install <name>@<tag>
安装1 | npm unpublish [<@scope>/]<pkg>[@<version>] |
从仓储中删除包,该操作会破坏依赖,不推荐适用,如果是为了鼓励用户适用新版本,可以使用deprecate命令
4. deprecate
1 | npm deprecate <pkg>[@<version>] <message> |
标记包弃用,用户在安装时npm会有警告
5. stars
1 | npm stars [<user>] |
查看用户喜欢的包
6. star/unstart
1 | npm star [<pkg>...] |
标记喜欢/取消喜欢标记
三 本地操作1. init
1
npm init [-f|--force|-y|--yes]
1 | npm init [-f|--force|-y|--yes] |
初始化package.json, 默认会有很多输入提示,可以通过-f|--force|-y|--yes
选项创建默认配置的package.json 已经存在package.json后再次运行npm init
不会破坏已有配置,只会变更你真正改动的部分
2. i/install
1 | npm install (with no args, in package dir) # 读取package.json安装 |
- –registry: 从指定仓储中下载安装包
- -S/–save: 安装并保存包信息到package.json的dependencies区
- -D/–save-dev: 安装并保存包信息到package.json的devDependencies区
- –tag: 优先根据标签而不是版本安装包
- –dry-run: 报告安装状况而不真的安装
- -f/–force: 安装时跳过缓存直接从远程下载
- -g/–global: 安装到全局
- –link: 链接全局安装的包的本地
- –no-shrinkwrap: 安装时忽略shrinkwrap
3. un/uninstall
1 | npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev] |
- -S/–save: 删除包并移除包在package.json的dependencies区的信息
- -D/–save-dev: 删除包并移除包在package.json的devDependencies区的信息
4. ddp/dedupe
1 | npm dedupe |
npm检查包依赖树并清除不要的包
5. dist-tags
1 | npm dist-tag add <pkg>@<version> [<tag>] # 添加标签 |
常见标签有latest, next, lts等
可以在发布和下载包是带上标签
1 | npm publish # 默认标签latest |
- –registry: 发布包到指定仓储
6. v/version
1 | npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git] |
该命令执行步骤 1. 检查git工作目录
- 运行preversion脚本, 可以写些触发测试的脚本
- 结合当前包当前版本信息和patch, minor, major等,生成新版本号,更新package.json中version字段
- patch 1.0.0 => 1.0.1 - prepatch 1.0.0 => 1.0.1-0 - minor 1.0.0 => 1.1.0 - preminor 1.0.0 => 1.1.0-0 - major 1.0.0 => 2.0.0 - premajor 1.0.0 => 2.0.0-0 - prerelease 1.0.0-0 => 1.0.0-1 - from-git 从git获取版本信息 4. 运行version脚本
- git提交并打标签
- 运行postversion脚本
7. it/install-test
1 | npm it |
相当于运行npm install && npm test
8. ln/link
1 | npm link # 在全局node_modules下创建当前文档夹的超链接 |
9. ls/list
1 | npm ls [[<@scope>/]<pkg> ...] |
打印依赖树
- –json: 已json格式输出
- –long: 展示更多信息
- –parseable: 显示展平的目录而不是依赖树
- –global: 显示全局安装的包的依赖树
- –depth: 树层级,从0开始
- –prod/production: 仅显示package.json里dependencies包的依赖
- –dev: 仅显示package.json里devDependencies包的依赖
10. up/update
1 | npm update [-g] [<pkg>...] |
更新包到包的semver所允许的最新版本, 并安装遗漏的包
- –save: 更新并保存更新到package.json
- –dev: 同时更新devDependencies中的包
- –depth: 默认情况下仅更新顶层(–depth=0)为0的包,如果想更新所有包,可以指定–depth=9999
11. outdated
1 | npm outdated [[<@scope>/]<pkg> ...] |
.e.g
1 | Package Current Wanted Latest Location |
列表栏
- Current: 当前版本
- Wanted: smever允许的最高版本
- Latest: 仓储中最新版本
- Location: 依赖树中的位置
命令选项
- –json: 已json格式输出
- –long: 展示更多信息
- –parseable: 平铺展示
- –global: 显示全局安装的包的依赖树
- –depth: 树层级,默认0
12. pack
1 | npm pack [[<@scope>/]<pkg>...] |
从包生成名为<name>-<version>.tgz
的tarball,并缓存
13. prune
1 | npm prune [[<@scope>/]<pkg>...] [--production] |
清理不在package.json生成的依赖树中的包
- –production: 移除devDependencies中的包
14. shrinkwrap
1 | npm shrinkwrap |
shrinkwrap用来锁定依赖包的版本
包A的package.json
1 | { |
包A的依赖树
1 | A@0.1.0 |
当B有新版本0.0.2发布, B@0.0.2满足<0.1.0, 所以npm install A
安装成功后依赖树
1 | A@0.1.0 |
我们希望包A依赖的B版本保持在B@0.0.1, 可以运行
1 | npm shrinkwrap |
该命令会生成npm-shrinkwrap.json, 其内容如下
1 | { |
运行npm install
时如果存在npm-shrinkwrap.json, npm在安装包时会根据shrinkwrap.json锁定依赖包的版本
15. cache
1 | npm cache add <tarball file> # 添加到缓存 |
缓存路径可以通过npm config get cache
获取
四 脚本
package.json的scripts区可以用来定义自定义脚本
1. run/run-script
1 | npm run <command> [-- <args>...] |
运行package.json的scripts中定义的命令
npm run会自动将node_modules/.bin
添加到环境变量PATH中。如果本地安装过mocha, 可以这样编写"scripts": {"test": "mocha test/*.js"}
而不需要"scripts": {"test": "node_modules/.bin/tap test/*.js"}
2. start
1 | npm start [-- <args>] |
等同与npm run start [-- <args>]
3. stop
1 | npm stop [-- <args>] |
等同与npm run stop [-- <args>]
4. tst/test
1 | npm test [-- <args>] |
等同与npm run test [-- <args>]
5. rb/rebuild
1 | npm rebuild [[<@scope>/<name>]...] |
运行指定包中的build脚本,适用于更新node版本后,重新编译C++包
6. restart
1 | npm restart [-- <args>] |
循序执行1. prerestart 2. prestop 3. stop 4. poststop 5. restart 6. prestart 7. start 8. poststart 9. postrestart
五 配置1. c/config
1
2
3
4
5
npm config set <key> <value> [-g|--global] # 添加或更新
npm config get <key> # 获取
npm config delete <key> # 删除
npm config list # 配置明细
npm config edit # 编辑器编辑
- –global: 全局配置
2. get
1
npm get <key> # 同npm config get
3. set
1
npm set <key> <value> [-g|--global] #同npm config set
六 查看1. root
1
2
npm root # 打印本地node_modules目录
npm root -g # 打印全局node_modules目录
2. prefix
1
2
npm prefix # 打印包含package.json最近父目录
npm prefix -g # 打印全局配置prefix的值
3. view
1
npm view [<@scope>/]<name>[@<version>] [<field>[.<subfield>]...]
1 | npm config set <key> <value> [-g|--global] # 添加或更新 |
1 | npm get <key> # 同npm config get |
1 | npm set <key> <value> [-g|--global] #同npm config set |
1. root
1 | npm root # 打印本地node_modules目录 |
2. prefix
1 | npm prefix # 打印包含package.json最近父目录 |
3. view
1 | npm view [<@scope>/]<name>[@<version>] [<field>[.<subfield>]...] |
查看仓储信息
1 | npm view compact |
1 | npm view compact@0.1.2 dependencies |
4. bin
1 | npm bin # 打印包含npm bin目录, 通常为node_modules/.bin/ |
5. bugs/issue
1 | npm bugs [<packagename>] |
打开包bug追踪url
1 | npm bugs npm # 浏览器打开https://github.com/npm/npm/issues |
6. docs/home
1 | npm docs [<pkgname> [<pkgname> ...]] |
打开文档url
1 | npm docs npm #浏览器打开https://docs.npmjs.com/ |
7. repo
1 | npm repo [<pkg>] |
打开git url
1 | npm repo npm #浏览器打开https://github.com/npm/npm |
8. help
1 | npm help <term> [<terms..>] |
打印特定术语或命令的帮助
9. help-search
1 | npm help-search <text> |
从npm官方markdown文档中搜索词条
七 其他1. completion
1
npm completion >> ~/.bashrc
1 | npm completion >> ~/.bashrc |
npm命令插补脚本
2. doctor
1 | npm doctor |
环境检测 - npm能调用node和git命令 - registry能够访问 - 本地和全局node_modules可写 - 缓存存在且tarball文档健全
3. edit
1 | npm edit <pkg>[@<version>] |
进入包目录并启动编辑器
4. explore
1 | npm explore <pkg> [-- <cmd>] |
进入包目录并运行命令
1 | npm explore connect -- ls |
5. ping
1 | npm ping [--registry <registry>] |
检查仓储是否可用