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