提升你的开发效率,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>

例如:`javascript
npm help install


另一种方式是通过下面的命令:

npm -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.js5.定义默认的 npm init使用 npm init 初始化一个新的项目,这会提示你关于项目的更多细节,并创建一个 package.json 文件。如果你厌倦了每次开始一个新的项目都需要重新输入同样的信息,可以使用 -y 标记表示你能接受 package.json 文件的一堆默认值:

npm init -y


或者你可以设置一些语义化的默认值:

npm config set init.author.name
npm config set init.author.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


这只有在你的系统能打开浏览器时有用--在服务端的系统上会失败。同样,可以打开一个模块的 Github 仓库:

npm repo


或者它的文档:

npm docs


或者它目前的bugs列表:

npm bugs


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


也可以查看检验当前和历史版本:

npm view versions


npm view <package> 会显示一个独立模块的所有信息,包括它的依赖、关键字、更新日期、贡献者、仓库地址和许可证等。10.使用开发中的模块当你正在开发一个模块时,会经常想在其它项目中尝试使用或者在任何一个目录运行它(如果你的应用支持),这时没必要将其发布到 npm,并全局安装---仅需在该模块所在目录使用下面的命令:

npn link


该命令会为模块在全局目录下创建一个符号链接。可以通过下面的命令查看模块引用:

npm list -g --depth=0


或者:

npm outdated -g

现在,就可以从命令行运行模块或者通过 require 在任何项目中引入该模块。另一个选择是,可以通过文件路径在 package.json 文件中声明对该模块的依赖:

"dependencies": {
"myproject": "file:../myproject/"
}

 ####文章转载自 开源中国社区 [http://www.oschina.net]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-front

解决&#xff1a; E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend)&#xff0c;是否有其他进程正占用它&#xff1f; 方法&#xff1a; 重新启动虚拟机服务器 再在黑屏终端中重新尝试输入su…

聚类效果评估指标总结

前言 实际工作中经常会用到一些聚类算法对一些数据进行聚类处理&#xff0c;如何评估每次聚类效果的好坏&#xff1f;可选的方法有1、根据一些聚类效果的指标来评估&#xff1b;2、直接打点。今天就主要总结下这段时间了解的聚类效果评估指标。废话少说&#xff0c;直接上干货…

{%extends bootstrap/base.html%}的添加,使得其他block无法继承

仙说{%extends "bootstrap/base.html"%}用法&#xff1a; 在base.html中调用一次即可&#xff0c;并且 {%extends "bootstrap/base.html"%} 要放在 最后头&#xff01;&#xff01;最后头&#xff01;最后头&#xff01; base中不用再添加 {% block cont…

Vue.directive自定义指令

Vue除了内部指令&#xff0c;我们也可以定义一些属于自己的指令&#xff0c;比如我们要定义一个v-diy的指令&#xff0c;作用就是让文字变成红色。 写好了这个功能&#xff0c;我们现在就自己定义一个全局的指令。我们这里使用Vue.directive( ); html <div v-diy"color…

HTML5 SVG

SVG介绍1.什么是svgsvg指可伸缩矢量图形&#xff08;Scalable Vector Graphics &#xff09;svg用来定义用于网络的基于矢量图形svg使用XML格式定义图形svg图像在放大或改变尺寸的情况下其图形质量不会有损失svg是网为王联盟的标准2.svg的优势svg图像可通过文本编辑器来创建和修…

运用Nginx代理和UWSGI将Flask项目部署在Linux中 详细步骤

nginx: 安装可以参照的路径: http://nginx.org/en/linux_packages.html#Ubuntu 启动Nginx nginx [ -c configpath] 默认配置目录&#xff1a;/etc/nginx/nginx.conf 查看进程&#xff1a; ps -ef |grep nginx 控制Nginx nginx -s xxxstop 快速关闭quit …

机器学习算法之KNN

前言 KNN一般用于有监督的分类场景&#xff0c;除此之外&#xff0c;KNN在异常检测场景中也有应用&#xff0c;下面主要介绍下KNN在这两面的应用原理。 KNN做分类的原理 计算步骤如下&#xff1a; 1&#xff09;算距离&#xff1a;给定测试对象&#xff0c;计算它与训练集中…

Supermap 组合单值专题图与标签专题图演示样例

效果图例如以下&#xff1a;单值专题图并显示每一个区域的相关文字信息 代码&#xff1a; <!DOCTYPE> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>单值专题图</title>…

[剑指Offer] 25.复杂链表的复制

1 /*2 struct RandomListNode {3 int label;4 struct RandomListNode *next, *random;5 RandomListNode(int x) :6 label(x), next(NULL), random(NULL) {7 }8 };9 */ 10 class Solution 11 { 12 public: 13 //在旧链表中创建新链表&#xff0…

Flask项目中应用七牛云存储

七牛云存储&#xff1a; https://developer.qiniu.com/kodo/sdk/1242/python 点击注册开通七牛开发者帐号 如果已有账号&#xff0c;直接登录七牛开发者后台&#xff0c;点击这里查看 Access Key 和 Secret Key pip install qiniu q Auth(Access Key,Secret Key) b…

异常检测算法之IForest

前言 IForest即孤立森林&#xff0c;可以用于做异常检测。一句话总结IForest做异常检测的原理&#xff1a;异常点密度小&#xff0c;基于树模型容易被一下切割出来&#xff0c;正常值密度大&#xff0c;需要切割多次才能得到目标值。 原理 iForest算法得益于随机森林的思想&…

JavaScript - 动态数据

1、使用ajax进行数据的请求 function getData(params){$.ajax({type: "POST", //提交方式data: "{params}", //请求参数url:, //请求接口contentType: "application/text;charsetutf-8",async: false, //是否同步dataType: &quo…

用c#编写爬虫在marinetraffic下载船仅仅图片

近期在做船仅仅识别方面的事情&#xff0c;须要大量的正样本来训练adaboost分类器。于是到marinetraffic这个站点上下载船仅仅图片。写个爬虫来自己主动下载显然非常方便。 站点特点 在介绍爬虫之前首先了解一下marinetraffic这个站点的一些特点&#xff1a; 1. 会定期检測爬虫…

发送手机验证码通过调用第三方网易云信API(flask项目)

一、 获取验证码&#xff1a; 1. 输入手机号码 2. 通过ajax发送请求 3. 后端&#xff1a; 获取手机号码 使用requests向第三方的服务端&#xff08;网易云信&#xff09;发送请求 官方文档 https://dev.yunxin.163.com/docs/product/%E7%9F%AD%E4%BF%A1/%E7%9F…

异常检测算法之LOF

前言&#xff1a; LOF&#xff1a;Local outlier factor&#xff0c;即局部异常因子。LOF主要是通过比较每个点p和其邻域点的密度来判断该点是否为异常点&#xff0c;如果点p的密度越低&#xff0c;越可能被认定是异常点。至于密度&#xff0c;是通过点之间的距离来计算的&…

Android属性动画进阶用法

2019独角兽企业重金招聘Python工程师标准>>> 在上周二文章中介绍补间动画缺点的时候有提到过&#xff0c;补间动画是只能对View对象进行动画操作的。而属性动画就不再受这个限制&#xff0c;它可以对任意对象进行动画操作。那么大家应该还记得之前我举的一个例子&am…

5.3linux下C语言socket网络编程简例

原创文章&#xff0c;转载请注明转载字样和出处&#xff0c;谢谢&#xff01; 这里给出在Linux下的简单socket网络编程的实例&#xff0c;使用tcp协议进行通信&#xff0c;服务端进行监听&#xff0c;在收到客户端的连接后&#xff0c;发送数据给客户端&#xff1b;客户端在接受…

parser.add_argument验证格式

article_bp Blueprint(article, __name__, url_prefix/api) api Api(article_bp) parser reqparse.RequestParser() parser.add_argument(name, typestr, help必须填写名称, requiredTrue) channel_fields { id: fields.Integer, cname: fields.String } clas…

异常检测算法之HBOS

前言 HBOS&#xff08;Histogram-based Outlier Score&#xff09;核心思想&#xff1a;将样本按照特征分成多个区间&#xff0c;样本数少的区间是异常值的概率大。 原理 该方法为每一个样本进行异常评分&#xff0c;评分越高越可能是异常点。评分模型为&#xff1a; 假设样…

字典和json 的区别 和转换

前言&#xff1a;字典和json非常像。接下来比较一下两者的异同 先看一下字典的写法&#xff1a; a {a:1,b:2,c:3} 再看一下json的写法&#xff1a; {"studentInfo":{"id":123456,"stu_name":"Dorra"} } 从形式上看&#xff0c;都是…