权限node
t/team 组织成员管理git
access 包访问控制github
adduser/login 用户登陆shell
logout 注销express
owner 全部者管理npm
whoami 查看用户信息json
包仓储浏览器
s/se/search 仓储查找包缓存
publish 发布bash
unpublish 取消发布
deprecate 弃用
stars 我喜欢的包
star 喜欢
unstar 取消喜欢
包本地
init 初始化package.json
i/install 安装
un/uninstall 删除
dedupe/ddp 清除重复包
dist-tags 标签管理
version 更新包的版本信息
it/install-test 运行npm install && npm test
ln/link 安装连接
ls/list 列出包
update/up 更新并安装遗漏的包
outdated 检测过时
pack 打包tarball文件
prune 清理外来包
shrinkwrap 锁定依赖包版本
cache 缓存管理
脚本
run/run-script 运行脚本
start 运行start脚本
stop 运行stop脚本
tst/test 运行test脚本
rb/rebuild 从新编译本地包
restart 顺序执行重启相关的一系列脚本
配置
c/config 配置管理
get 列出配置
set 设置配置
查看
root 包根目录
prefix 打印prefix配置
v/view 查看仓储信息
bin 查看bin目录
bugs/issue 浏览器查看bugs
docs/home 浏览器查看帮助文档
repo 浏览器查看仓储
help 查看帮助
help-search 帮助中搜索关键字
其余
completion shell插补
doctor 环境检测
edit 进入包目录并启动编辑器
explore 进入包目录并运行命令
ping 检查仓储是否可用
npm容许经过scope组织私有包,经过team细化权限控制.
npm官方仓储有两种类型的包,普通包和scope包
普通包特征:
只能公有,谁均可如下载使用
仅能够经过全部者(owner)进行权限控制,若是要容许某个用户修改或发布包,必须将该用户添加到包的全部者列表。添加到包全部者列表的用户具有全部的权限.
scope包特征:
包名有两部组成,@scope/name, @后的为scope名,/后的才是具体的包名
能够控制公有和私有
细化的权限控制,好比能够建立团队,并赋予团队对包只读/修改的权限
npm owner add <user> [<@scope>/]<pkg> # 将用户添加到包的全部者列表 npm owner rm <user> [<@scope>/]<pkg> # 从包的全部这列表中删除用户 npm owner ls [<@scope>/]<pkg> # 列出包的全部者
成为包的全部者的用户,将可以修改元数据(如标记弃用),发布新版本,添加其余用户到包的全部者列表
npm team create <scope:team> # 建立团队 npm team destroy <scope:team> # 删除团队 npm team add <scope:team> <user> # 添加用户到团队 npm team rm <scope:team> <user> # 从团队中移除用户 npm team ls <scope>|<scope:team> 列出团队/成员 npm team edit <scope:team> 用编辑器编辑团队信息
npm access public [<package>] # 设置包开放 npm access restricted [<package>] # 设置包私有 npm access grant <read-only|read-write> <scope:team> [<package>] # 设置团队对包能够只读/容许修改 npm access revoke <scope:team> [<package>] # 从团队中收回包权限 npm access ls-packages [<user>|<scope>|<scope:team>] # 列出用户/域/团队可以访问的包 npm access ls-collaborators [<package> [<user>]] # 列出包的权限信息 npm access edit [<package>] # 用编辑器编辑包权限
npm adduser [--registry=url] [--scope=@orgname] [--always-auth]
提示输入username, password, email,进行登陆校验,返回token保存到.npmrc
npm logout [--registry=<url>] [--scope=<@scope>]
请求仓储服务将当前token失效
npm whoami [--registry <registry>]
列出用户在npmjs.org上的用户名
npm search [-l|--long] [--json] [--parseable] [--no-description] [search terms ...]
-l|--long: 展现出所有的DESCRIPTION栏信息
--no-description: 不显示DESCRIPTION栏信息
npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]
--tag: 带上tag信息发布,以后包能够经过npm install <name>@<tag>
安装
--access: 仅适用于scope包,默认为restricted
npm unpublish [<@scope>/]<pkg>[@<version>]
从仓储中删除包,该操做会破坏依赖,不推荐适用,若是是为了鼓励用户适用新版本,可使用deprecate命令
npm deprecate <pkg>[@<version>] <message>
标记包弃用,用户在安装时npm会有警告
npm stars [<user>]
查看用户喜欢的包
npm star [<pkg>...] npm unstar [<pkg>...]
标记喜欢/取消喜欢标记
npm init [-f|--force|-y|--yes]
初始化package.json, 默认会有不少输入提示,能够经过-f|--force|-y|--yes
选项建立默认配置的package.json
已经存在package.json后再次运行npm init
不会破坏已有配置,只会变动你真正改动的部分
npm install (with no args, in package dir) # 读取package.json安装 npm install [<@scope>/]<name> # 默认安装标签为latest npm install [<@scope>/]<name>@<tag> # 指定标签 npm install [<@scope>/]<name>@<version> # 指定版本 npm install [<@scope>/]<name>@<version range> # 指定版本范围 npm install <tarball file> # 经过tarball文件安装 npm install <tarball url> # 经过tarball文件url连接安装 npm install <git remote url> # 经过git安装包, url格式为<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish>] npm install <folder> 经过包所在的文件夹安装
--registry: 从指定仓储中下载安装包
-S/--save: 安装并保存包信息到package.json的dependencies区
-D/--save-dev: 安装并保存包信息到package.json的devDependencies区
--tag: 优先根据标签而不是版本安装包
--dry-run: 报告安装情况而不真的安装
-f/--force: 安装时跳过缓存直接从远程下载
-g/--global: 安装到全局
--link: 连接全局安装的包的本地
--no-shrinkwrap: 安装时忽略shrinkwrap
npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev]
-S/--save: 删除包并移除包在package.json的dependencies区的信息
-D/--save-dev: 删除包并移除包在package.json的devDependencies区的信息
npm dedupe
npm检查包依赖树并清除不要的包
npm dist-tag add <pkg>@<version> [<tag>] # 添加标签 npm dist-tag rm <pkg> <tag> # 移除标签 npm dist-tag ls [<pkg>] # 列出包所包含的标签
常见标签有latest, next, lts等
能够在发布和下载包是带上标签
npm publish # 默认标签latest npm publish --tag next # 发布next标签 npm install npm # 默认标签latest npm install npm@next npm install --tag next
--registry: 发布包到指定仓储
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]
该命令执行步骤
检查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获取版本信息
运行version脚本
git提交并打标签
运行postversion脚本
npm it npm install-test
至关于运行npm install && npm test
npm link # 在全局node_modules下建立当前文件夹的超连接 npm link [<@scope>/]<pkg>[@<version>] # 将全局安装的包连接到本地node_modules中
npm ls [[<@scope>/]<pkg> ...]
打印依赖树
--json: 已json格式输出
--long: 展现更多信息
--parseable: 显示展平的目录而不是依赖树
--global: 显示全局安装的包的依赖树
--depth: 树层级,从0开始
--prod/production: 仅显示package.json里dependencies包的依赖
--dev: 仅显示package.json里devDependencies包的依赖
npm update [-g] [<pkg>...]
更新包到包的semver所容许的最新版本, 并安装遗漏的包
--save: 更新并保存更新到package.json
--dev: 同时更新devDependencies中的包
--depth: 默认状况下仅更新顶层(--depth=0)为0的包,若是想更新全部包,能够指定--depth=9999
npm outdated [[<@scope>/]<pkg> ...]
.e.g
Package Current Wanted Latest Location ajv 4.8.2 4.11.8 5.0.1 example async 2.1.2 2.4.0 2.4.0 example body-parser 1.15.2 1.17.1 1.17.1 example
列表栏
Current: 当前版本
Wanted: smever容许的最高版本
Latest: 仓储中最新版本
Location: 依赖树中的位置
命令选项
--json: 已json格式输出
--long: 展现更多信息
--parseable: 平铺展现
--global: 显示全局安装的包的依赖树
--depth: 树层级,默认0
npm pack [[<@scope>/]<pkg>...]
从包生成名为<name>-<version>.tgz
的tarball,并缓存
npm prune [[<@scope>/]<pkg>...] [--production]
清理不在package.json生成的依赖树中的包
--production: 移除devDependencies中的包
npm shrinkwrap
shrinkwrap用来锁定依赖包的版本
包A的package.json
{ "name": "A", "version": "0.1.0", "dependencies": { "B": "<0.1.0" } }
包A的依赖树
A@0.1.0 `-- B@0.0.1 `-- C@0.0.1
当B有新版本0.0.2发布, B@0.0.2知足<0.1.0, 因此npm install A
安装成功后依赖树
A@0.1.0 `-- B@0.0.2 `-- C@0.0.1
咱们但愿包A依赖的B版本保持在B@0.0.1, 能够运行
npm shrinkwrap
该命令会生成npm-shrinkwrap.json, 其内容以下
{ "name": "A", "version": "0.1.0", "dependencies": { "B": { "version": "0.0.1", "from": "B@^0.0.1", "resolved": "https://registry.npmjs.org/B/-/B-0.0.1.tgz", "dependencies": { "C": { "version": "0.0.1", "from": "org/C#v0.0.1", "resolved": "git://github.com/org/C.git#5c380ae319fc4efe9e7f2d9c78b0faa588fd99b4" } } } } }
运行npm install
时若是存在npm-shrinkwrap.json, npm在安装包时会根据shrinkwrap.json锁定依赖包的版本
npm cache add <tarball file> # 添加到缓存 npm cache add <folder> npm cache add <tarball url> npm cache add <name>@<version> npm cache ls [<path>] # 缓存明细 npm cache clean [<path>] # 清除缓存
缓存路径能够经过npm config get cache
获取
package.json的scripts区能够用来定义自定义脚本
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"}
npm start [-- <args>]
等同与npm run start [-- <args>]
npm stop [-- <args>]
等同与npm run stop [-- <args>]
npm test [-- <args>]
等同与npm run test [-- <args>]
npm rebuild [[<@scope>/<name>]...]
运行指定包中的build脚本,适用于更新node版本后,从新编译C++包
npm restart [-- <args>]
循序执行1. prerestart 2. prestop 3. stop 4. poststop 5. restart 6. prestart 7. start 8. poststart 9. postrestart
npm config set <key> <value> [-g|--global] # 添加或更新 npm config get <key> # 获取 npm config delete <key> # 删除 npm config list # 配置明细 npm config edit # 编辑器编辑
--global: 全局配置
npm get <key> # 同npm config get
npm set <key> <value> [-g|--global] #同npm config set
npm root # 打印本地node_modules目录 npm root -g # 打印全局node_modules目录
npm prefix # 打印包含package.json最近父目录 npm prefix -g # 打印全局配置prefix的值
npm view [<@scope>/]<name>[@<version>] [<field>[.<subfield>]...]
查看仓储信息
npm view compact # 打印 { name: 'compact', description: 'A JavaScript compacting middleware for express', 'dist-tags': { latest: '0.1.2' }, maintainers: [ 'serby <paul@serby.net>' ], time: { modified: '2017-03-28T12:49:48.000Z', created: '2012-02-06T01:39:50.261Z', '0.1.2': '2012-09-04T11:19:17.618Z', '0.1.1': '2012-08-29T08:18:12.345Z', '0.1.0': '2012-07-09T14:40:56.751Z', '0.0.7': '2012-07-04T17:14:01.593Z', '0.0.6': '2012-06-29T14:29:04.847Z', '0.0.5': '2012-05-23T10:10:15.010Z', '0.0.4': '2012-03-31T09:05:40.450Z', '0.0.3': '2012-03-23T15:25:18.289Z', '0.0.2': '2012-03-21T18:15:24.718Z', '0.0.1': '2012-02-06T01:39:50.261Z' }, users: { serby: true }, author: 'Paul Serby <paul@serby.net>', repository: { type: 'git', url: 'git://github.com/serby/compact.git' }, versions: [ '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0.5', '0.0.6', '0.0.7', '0.1.0', '0.1.1', '0.1.2' ], version: '0.1.2', main: './lib/compact.js', scripts: { test: 'mocha -r should -R spec' }, engines: { node: '>=0.8' }, dependencies: { lodash: '~0.3', async: '~0.1', 'uglify-js': '~1.3', mkdirp: '~0.3' }, devDependencies: { mocha: '*', should: '~1.1', async: '~0.1', asyncjs: '~0.0' }, optionalDependencies: {}, dist: { shasum: '66361e17108185bf261d42aff6a91b925e473139', size: 7603, noattachment: false, tarball: 'http://registry.npm.taobao.org/compact/download/compact-0.1.2.tgz' }, directories: {}, publish_time: 1346757557618 }
npm view compact@0.1.2 dependencies # 打印 { lodash: '~0.3', async: '~0.1', 'uglify-js': '~1.3', mkdirp: '~0.3' }
npm bin # 打印包含npm bin目录, 一般为node_modules/.bin/ npm prefix -g # 打印全局npm bin目录
npm bugs [<packagename>]
打开包bug追踪url
npm bugs npm # 浏览器打开https://github.com/npm/npm/issues
npm docs [<pkgname> [<pkgname> ...]] npm docs . npm home [<pkgname> [<pkgname> ...]] npm home .
打开文档url
npm docs npm #浏览器打开https://docs.npmjs.com/
npm repo [<pkg>]
打开git url
npm repo npm #浏览器打开https://github.com/npm/npm
npm help <term> [<terms..>]
打印特定术语或命令的帮助
npm help-search <text>
从npm官方markdown文档中搜索词条
npm completion >> ~/.bashrc
npm命令插补脚本
npm doctor
环境检测
npm能调用node和git命令
registry可以访问
本地和全局node_modules可写
缓存存在且tarball文件健全
npm edit <pkg>[@<version>]
进入包目录并启动编辑器
npm explore <pkg> [-- <cmd>]
进入包目录并运行命令
npm explore connect -- ls # 打印 HISTORY.md index.js LICENSE node_modules package.json README.md
npm ping [--registry <registry>] npm ping --registry https://registry.npmjs.org
检查仓储是否可用
更多文章的目录在这里