若是你写js, 或者使用hexo
一类的博客工具, 那么应该不会对npm
感到陌生.html
npm
是Node.js
的包管理工具(package manager), 它的背后是Node.js
的社区生态在支持. 咱们今天聊聊npm
的玩儿法, 包括了经常使用的命令和参数以及在具体场景下的用法.node
咱们今天只谈npm
, 相关的辅助工具各位能够留言评论.git
几乎全部的命令行工具/程序(Command Line Tool)都会有help
这个命令或者--help
这个参数, 没有的要么是程序自己就是只供第三方调用api的, 要么就是开发者不够专业. 再好的程序开发出来若是目标受众无从得知它的用法, 那么它就等同于不存在.npm
npm
的帮助功能十分优秀, 直接运行npm help
或者npm --help
将会获得以下结果json
能够看到, 全部的命令都已经罗列在这里了, 若是你想知道具体某个命令的用法, 能够直接在help后面跟上命令名称, 或者直接执行命令, 并在后面加上--help
参数api
npm help init # or npm init --help
区别在于, help
命令会展现详情的文档, 也就是会调用浏览器打开本地的html页面. 取决于你的npm版本, 可能须要加上-l
or --long
参数浏览器
而--help
参数则会显示一份简短的说明.能够看到init
是有两个别名
的, 分别是create
和innit
, 而且带有四个参数,分别是--force
-f
, --yes
-y
--scope
,这里要注意的是-f
和-y
分别是--force
和--yes
的简写, 对应的结果是同样的.缓存
事实上这是CLI
(Command Line Interface)设计的一个通用规范. 你能够在别的命令行程序上发现相似的用法.sass
npm help
最厉害的地方在于, 若是你不知道具体的命令名称, 或者只是想要知道某个知识点, 那么它也能够作模糊搜索, 命令的用法跟上面的相同, 好比bash
npm help scri
将会获得
npm
将会列举出全部它认为可能的条目供你查阅.
若是有兴趣, 你能够经过npm -l
发现更多详细的用法.
咱们来以这个流程走一遍在开发当中会跟npm
打交道的地方.
也就是要建立一个package.json
文件了,
npm init # 选择性的使用-y|--yes参数能够快速跳过问答, 直接建立一份默认配置
正常状况下你就能够开始安装相应的依赖了.可是在有些状况下, 你可能会有切换registry
以及设置代理的烦恼. 甚至于不一样的项目可能有不一样的私有包位于不一样的私有npm
仓库上. 所以设置registry
跟proxy
也是比较经常使用的命令
咱们仍是先跑一下帮助, 看看能获得什么信息
npm config --help
See! 相应的CURD
操做一目了然, 因此咱们能够这样子设置代理和npm
源
npm config set registry https://registry.npm.taobao.org npm config set proxy http://127.0.0.1:1080
是的, help
就是这么强大且方便, 读到这里, 若是你动手能力比较强, 能够直接去实践了(固然最好能够读完啦).
这里须要说明的地方是, 设置了proxy
以后, 相似node-sass
及electron
一类须要执行postinstall
脚本的package, 下载时也将会应用这个代理设置.
你能够直接在项目的根目录下建立.npmrc
文件, 以键值对的形式写上对应的配置项, 保存以后就会在项目范围内生效了.
registry=https://registry.npmjs.org sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
一样, 全局范围内生效的.npmrc
在你的用户目录下, 两者都存在时, 将优先应用项目下的配置.
话很少说, 先跑一下help
install
带有的功能及参数就比较多了, 咱们一一过一遍.
首先不带参数的时候, 就会安装package.json
内的全部依赖, 正常状况下会将dependencies
devDependencies
optionalDependencies
三种种依赖类型所有安装.(若是你想知道所有四种依赖(还有个peerDependencies
)的详细信息, 能够经过npm help package.json
查阅).
install
的路径, 能够是包名, 本地文档或者git地址
install
带有几个参数, 前三个分别意味着将安装的依赖划分到指定的依赖类型当中. --save-exact
跟npm
执行的升级策略有关, 这里不作具体阐述. 最后一个你应该也猜到了它的做用, 就是只安装, 可是不保存依赖信息到package,json
当中.
事实上, install
及其余命令所能附加的参数远不止这里罗列的这些, 你也能够经过--registry
参数指定这一次安装所使用的npm
源, 或者使用--no-proxy
指定这一次暂时不用代理, 使用--save-exact
指定按照package.json
里的版本号安装依赖来避免恼人的自动向上更新策略等等, 这些参数是能够累加的, 具体的用法及可用的参数能够参考npm help install
给出的文档, 这里只作简单提示.
不少时候, 不少问题都是在关键的时候出现的. 好比你想安装一个包的时候, 死活安装不上来, 各类错误都有...这里咱们简单列举几个平时比较有可能遇到的.
致使这个问题的缘由通常有两种, 要么, 你开了代理, 可是使用的npm
源是代理服务器没法访问的; 要么, 你上一次的CTRL+C
致使了npm的缓存出现了问题, 你须要npm cache clean
这个命令, 记得加上--force
. 如同运行以后给出的提示, 咱们只建议你在走投无路的时候尝试, 由于node_modules
机制下, 缓存是比较珍贵的🙃.
基本上, 出现这个错误的时候错误信息已经告诉你是权限问题了, Unix
系统下须要sudo
执行, Windows NT
下须要管理员身份的command prompt
.
你多是中了semver
版本策略的招, 具体的能够经过npm help update
查看详细的升级策略, 具体的解法是, 你可让其余人在执行install
命令的时候加上--save-exact
参数.
发布的话, 除了publish
, 有一个比较使用的命令, 就是whoami
. 它能够查看当前registry
下登陆的用户, 未登陆或者登陆的registry
不对就会给出error.
事实上, 这里的绝大多数内容在npm
的doc上都有. 我只列举了一部分经常使用的以及一些使用技巧. help
命令的使用方式在大多数CLI
应用上是差很少的, 你能够触类旁通地都本身试试. 若是有更好地建议或者错误须要指出, 敬请留言评论啦. That's All.