【NPM】361- 10个 NPM 使用技巧
对于一个项目,常用的一些npm简单命令包含的功能有:
初始化一个文件夹( npm init )
下载npm模块( npm install )
创建测试( npm test )
自定义脚本( npm run )
但是,进一步了解一些 npm 的使用技巧可以彻底改变你的日常开发任务。
注: 如果你需要关于初学npm的参考,可以参阅我们的初学者指南。如果你对 npm 和 Yarn 之间的差异感到困扰,可以参阅我们发表的文章:Yarn vs npm:你需要知道的一切
1. 获取帮助
npm 文档 和 CLI 命令行文档 是非常不错地的学习资料,但需要通过浏览器访问,这并不是很方便。因而可以通过命令行快速获取所有可选项:
npm help
此外,还能获取特定 npm 命令的使用帮助:
npm help <command>
例如:npm help install
另一种方式是通过下面的命令:
npm <command-h
2. npm 命令自动完成
npm 通过bash提供了命令自动完成功能(包括 Bash for Windows 10 ):
npm completion >~/.bashrc
//or Z shell
npm completion >~/.zshrc
重新加载shell配置文件:
source ~/.bashrc
现在,在终端注入 npm ins ,然后按下 tab 键就会出现 install 了,不会再浪费时间去全部输入了。
3.修复全局模块的权限
当你试图安装全部模块时,类 Linux 系统可能会抛出权限错误,可以在npm命令之前添加 sudo 来执行,但这是一个较危险的选择。一个更高的解决方式是改变 npm 默认的模块安装目录:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
使用适当的文本编辑器将下面的一行添加到 ~/.bashrc 或者 ~/.zshrc 文件中:
export PATH="$HOME/.npm-global/bin:$PATH"
重新加载配置文件(source ~/.bashrc),然后重新安装npm到用户所属路径:
npm install -g npm
这也会更新npm。
4.持续更新npm
你可以通过下面的命令显示npm当前的版本:
npm -v
如果有需要,可以通过下面的命令更新npm:
npm install -g npm
当 Node 的主版本 released 之后,你也可能需要重新构建 C++ 扩展:
npm rebuild
如果你需要管理多个版本的node.js和npm,可以考虑使用 n 或者 nvm。这有一篇关于 nvm 的文章:使用 nvm 安装多版本的Node.js
5.定义默认的 npm init
使用 npm init 初始化一个新的项目,这会提示你关于项目的更多细节,并创建一个 package.json 文件。
如果你厌倦了每次开始一个新的项目都需要重新输入同样的信息,可以使用 -y 标记表示你能接受 package.json 文件的一堆默认值:
npm init -y
或者你可以设置一些语义化的默认值:
npm config set init.author.name <name>
npm config set init.author.email <email>
6.更精准的模块搜索
到目前为止,npm上已经有超过350000个模块了,并且每天还在持续增长。尽管有很多非常棒的模块,但是你还是想避免使用一些不受欢迎的、存在bug的或者无人维护的模块。在 npmjs 和 Github 上搜索npm模块是很实用但这还有一些其它选择:
npms
npms 根据一个基于项目版本、模块下载次数、最新更新日期、提交频率、测试覆盖率、文档、贡献者数量、issues数、star数、forks数和作者在社区的地位的综合测量分数进行模块排名。
npm Discover
npm Discover 定位于快速搜索和其它模块通常一起使用的模块,如 body-parser 通常和Express一起使用。
Packages by PageRank
Packages by PageRank 按照模块的谷歌排名进行搜索和排序。
Curated npm Lists
还一个选择就是利用别人的搜索结果。当需要一个健壮的解决方案时,我经常会参考 sindresorhus 的 Awesome Node.js。
7.管理你的模块
你已经安装了一些模块,看看都有啥:
npm list
(ls、la & ll 可以用作 list 的别名)
该命令会显示所有模块:(安装的)模块,子模块以及子模块的子模块等。可以限制输出的模块层级:
npm list --depth=0
打开一个模块的主页:
npm home <package>
这只有在你的系统能打开浏览器时有用--在服务端的系统上会失败。同样,可以打开一个模块的 Github 仓库:
npm repo <package>
或者它的文档:
npm docs <package>
或者它目前的bugs列表:
npm bugs <package>
npm list 会显示和你已经安装地模块的关联模块---这些没有在 package.json文件中被引用。你可以单独 npm uninstall 每一个模块或者全部移除它们:
npm prune
如果安装模块时你添加了 --production 标记或者 NODE_ENV 被设置成 production,package.json 文件中被指定为 devDependencies 的模块也会被移除。
8.锁定依赖
默认情况下,当用 --save/-S 或者 --save-dev/-D 安装一个模块时,npm 通过脱字符(^)来限定所安装模块的主版本号。例如,当运行 npm update 时, ^1.5.1 允许安装版本号大于 1.5.1 但小于 2.0.0 版本的模块。
波浪号(~)字符是限定模块的次要版本。例如,当运行 npm update 时, ~1.5.1 允许安装版本号大于 1.5.1 但小于 1.6.0 版本的模块。可以将需要安装的模块版本前缀默认设置成波浪号(~):
npm config set save-prefix="~"
对于那些偏执的认为任何更新(模块的行为)会破坏系统的人,可以配置npm仅安装精确版本号的模块:
npm config set save-exact true
另一个选择是,可以在项目中使用 shrinkwrap:
npm shrinkwrap
这会生成一个 shrinkwrap.json 文件,该文件包含了你正在使用的模块的指定版本。当运行 npm install 时,该文件所指定的模块版本会覆盖 package.json 文件中所指定的版本。
9. 找出过时的模块
怎么知道一个模块已经更新了呢?我之前的方式是先列举出项目所依赖的模块(npm list --depth=0),然后在 npmjs.com 上找到该模块,手动检查该模块的版本是否已经更新。这非常费时。幸运的是,有一个更简单的方式:
npm outdated
或者 npm outdated -g 来查找全局模块。
你也可以查看一个独立模块的当前版本:
npm list <package>
也可以查看检验当前和历史版本:
npm view <packageversions
npm view <package> 会显示一个独立模块的所有信息,包括它的依赖、关键字、更新日期、贡献者、仓库地址和许可证等。
10.使用开发中的模块
当你正在开发一个模块时,会经常想在其它项目中尝试使用或者在任何一个目录运行它(如果你的应用支持),这时没必要将其发布到 npm,并全局安装---仅需在该模块所在目录使用下面的命令:
npn list
该命令会为模块在全局目录下创建一个符号链接。可以通过下面的命令查看模块引用:
npm list -g --depth=0
或者:
npm outdated -g
现在,就可以从命令行运行模块或者通过 require 在任何项目中引入该模块。
另一个选择是,可以通过文件路径在 package.json 文件中声明对该模块的依赖:
"dependencies": {
"myproject": "file:../myproject/"
}
原文作者:Pomy
回复“加群”与大佬们一起交流学习~
【NPM】361- 10个 NPM 使用技巧的更多相关文章
- 提升你的开发效率,10 个 NPM 使用技巧
对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹(npm init),下载npm模块(npm install),创建测试(npm test) 和自定义脚本(npm run).但是, ...
- 10个 NPM 使用技巧
对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹( npm init ),下载npm模块( npm install ),创建测试( npm tese ) 和自定义脚本( npm r ...
- npm ci命令比npm installer命令快2至10倍
npm 5.7.1的发布给我们带了一系列新的功能. 其中我最喜欢的就是npm ci命令了. npm ci命令 1.npm ci命令只根据lock-file去下载node_modules. 如果你的pa ...
- 有关npm rum的3个简洁技巧
[编者按]本文作者为来自 MongoDB 的 NodeJS 工程师 Valeri Karpov.Valeri 专注于维护常见的 Mongoose ODM,是<Professional Angul ...
- npm 一些有用的提示和技巧
生成 package.json 我们通常执行 npm init,然后开始添加 npm 请求的信息. 但是,如果我们不关心所有这些信息,并且希望保留默认值,那么对于 npm 请求的每一条数据,我们都按 ...
- npm install报错 npm ERR! enoent ENOENT: no such file or directory
在npm之后出现如下错误: $ npm install npm WARN checkPermissions Missing write access to /Users/lucas/code/js/v ...
- npm ERR! errno 1 npm ERR! chromedriver@2.35.0 install: `node install.js`
在使用webpack+vue-cli进行vue项目构建时可能会出现一下错误,webpack@3.10.0及以上版本和vue-cli@2.9.2及以上版本会自动安装依赖(我在自己电脑上测试是这样的)不用 ...
- node.js开发 npm包管理工具 npm 和 cnpm区别
npm 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用. 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用 np ...
- 10个jQuery小技巧
收集的10个 jQuery 小技巧/代码片段,可以帮你快速开发. 1.返回顶部按钮 你可以利用 animate 和 scrollTop 来实现返回顶部的动画,而不需要使用其他插件. $('a.top' ...
随机推荐
- [LC] 700题 Search in a Binary Search Tree (二叉搜索树中的搜索) (二叉搜索树)
①中文题目 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 例如, 给定二叉搜索树: 在上述示例 ...
- python:time模块
(鱼c)time模块详解http://bbs.fishc.com/forum.php?mod=viewthread&tid=51326&extra=page%3D1%26filter% ...
- 对js中局部变量、全局变量和闭包的理解
对js中局部变量.全局变量和闭包的理解 局部变量 对于局部变量,js给出的定义是这样的:在 JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域 ...
- UML元素绘制方式
UML是由视图(View).图(Diagrams).模型元素(Model elements)是和通用机制等几个部分构成. 视图:视图是对系统的抽象表示,UML共有9种不同的图类型. 模型元素:代表面向 ...
- 【2018寒假集训 Day2】【动态规划】维修栅栏
维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...
- nginx 负载均衡简单配置
配置要求: 三台服务器 127.0.0.1 主负载(把访问请求分给主机池) 127.0.0.2 主机2 127.0.0.3 主机3 第一步: 配置127.0.0.1 ...
- GO 单例模式
wiki百科: 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比 ...
- Socket模拟SSH
Socket模拟SSH 主要思路 客户端发送相关命令到服务端,服务端执行命令(通过subprocess模块实现)然后将结果返回给客户端 小知识 Linux中可以发送空数据,服务端能接受到空数据 win ...
- 文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr/chattr 使用介绍
第2周第3次课(3月28日) 课程内容:2.14 文件和目录权限chmod2.15 更改所有者和所属组chown2.16 umask2.17 隐藏权限lsattr/chattr 2.14 文件和目录权 ...
- JVM虚拟机详解+Tomcat性能优化
1.JVM(java virtual mechinal) ()JVM有完善的硬件架构,如处理器.堆栈.寄存器当,还具有相应的指令系统. ()JVM的主要工作时解释自己的指令集(即字节码),并映射到本地 ...