[About NPM] 看看NPM怎么玩

​ 若是你写js, 或者使用hexo一类的博客工具, 那么应该不会对npm感到陌生.html

npmNode.js的包管理工具(package manager), 它的背后是Node.js的社区生态在支持. 咱们今天聊聊npm的玩儿法, 包括了经常使用的命令和参数以及在具体场景下的用法.node

前言

咱们今天只谈npm, 相关的辅助工具各位能够留言评论.git

用好help

几乎全部的命令行工具/程序(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版本, 可能须要加上-lor --long参数浏览器

--help参数则会显示一份简短的说明.能够看到init是有两个别名的, 分别是createinnit, 而且带有四个参数,分别是--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仓库上. 所以设置registryproxy也是比较经常使用的命令

  • 设置registry

咱们仍是先跑一下帮助, 看看能获得什么信息

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-sasselectron一类须要执行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-exactnpm执行的升级策略有关, 这里不作具体阐述. 最后一个你应该也猜到了它的做用, 就是只安装, 可是不保存依赖信息到package,json当中.

事实上, install及其余命令所能附加的参数远不止这里罗列的这些, 你也能够经过--registry参数指定这一次安装所使用的npm源, 或者使用--no-proxy指定这一次暂时不用代理, 使用--save-exact指定按照package.json里的版本号安装依赖来避免恼人的自动向上更新策略等等, 这些参数是能够累加的, 具体的用法及可用的参数能够参考npm help install给出的文档, 这里只作简单提示.

  • 开发过程常见问题

不少时候, 不少问题都是在关键的时候出现的. 好比你想安装一个包的时候, 死活安装不上来, 各类错误都有...这里咱们简单列举几个平时比较有可能遇到的.

  1. unexpected toekn|json|html

致使这个问题的缘由通常有两种, 要么, 你开了代理, 可是使用的npm源是代理服务器没法访问的; 要么, 你上一次的CTRL+C致使了npm的缓存出现了问题, 你须要npm cache clean这个命令, 记得加上--force. 如同运行以后给出的提示, 咱们只建议你在走投无路的时候尝试, 由于node_modules机制下, 缓存是比较珍贵的🙃.

  1. EPERM

基本上, 出现这个错误的时候错误信息已经告诉你是权限问题了, Unix系统下须要sudo执行, Windows NT下须要管理员身份的command prompt.

  1. 同一个项目, Jack新增的项目依赖在Lucy那里install以后就error不断

你多是中了semver版本策略的招, 具体的能够经过npm help update查看详细的升级策略, 具体的解法是, 你可让其余人在执行install命令的时候加上--save-exact参数.

  • 发布

发布的话, 除了publish, 有一个比较使用的命令, 就是whoami. 它能够查看当前registry下登陆的用户, 未登陆或者登陆的registry不对就会给出error.

Conclusion

事实上, 这里的绝大多数内容在npm的doc上都有. 我只列举了一部分经常使用的以及一些使用技巧. help命令的使用方式在大多数CLI应用上是差很少的, 你能够触类旁通地都本身试试. 若是有更好地建议或者错误须要指出, 敬请留言评论啦. That's All.

相关文章
相关标签/搜索