利用npm安装/删除/发布/更新/撤销发布包

本文深入讲解npm包管理器的使用,包括本地与全局安装、删除、发布与撤销发布包的过程,以及版本控制策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

正文

什么是npm?

npm是javascript的包管理工具,是前端模块化下的一个标志性产物

简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率

 

1.从社区的角度:把针对某一特定问题的模块发布到npm的服务器上,供社区里的其他人下载和使用,同时自己也可以在社区里寻找特定的模块的资源,解决问题

2.从团队的角度:有了npm这个包管理工具,复用团队既有的代码也变的更加地方便

 

回到顶部

利用npm安装包

npm安装的方式——本地安装和全局安装

 

什么时候用本地/全局安装?

1.当你试图安装命令行工具的时候,例如 grunt CLI的时候,使用全局安装

全局安装的方式:npm install -g 模块名称

2.当你试图通过npm install 某个模块,并通过require('XXX')的方式引入的时候,使用本地安装

本地安装的方式:npm install 模块名称

 

你很可能遇到的问题

在你试图本地安装的时候一般都会遇到permission deny的问题

例如我这里第一次尝试全局安装express,输入npm install -g express

 

【吐槽】而且让人无语的是在安装了许多依赖后才提醒你权限不够...

 

解决方式:

1. sudo npm install -g XXX ,以管理员的身份安装

评价:每次都要输入账号和密码,非常繁琐,且官方并不推荐( You could also try using sudo, but this should be avoided)

2. sudo chown -R 你的账号名 npm所在目录的路径 /{lib/node_modules,bin,share}

评价:官方推荐的做法,chown全称为change owner,即将npm目录的所有者指定为你的名字(授予权限),-R表示对指定目录下所有的子目录和文件也都采取同种操作。

 

<1>首先,通过 npm config get prefix获取npm所在目录的路径,例如像这样:

<2>在命令行输入 sudo chown -R 你的账号名 npm所在目录的路径 /{lib/node_modules,bin,share},例如:

【注意】{lib/node_modules,bin,share}中的大括号是要写上去的

再次全局安装express:输入npm install -g express

 

安装成功

 

3.sudo chmod 777 npm所在目录(不推荐)

评价:这是网上经常能够看到的解决方式,但,官方教程里没有对此有任何提及。chmod代表change mode更改读写模式,对该目录授予最高权限,任何人可读可写,这是很危险的

 

本地安装的时候,将依赖包信息写入package.json中

 

注意一个问题,在团队协作中,一个常见的情景是他人从github上clone你的项目,然后通过npm install安装必要的依赖,(刚从github上clone下来是没有node_modules的,需要安装)那么根据什么信息安装依赖呢?就是你的package.json中的dependencies和devDepencies。所以,在本地安装的同时,将依赖包的信息(要求的名称和版本)写入package.json中是很重要的!

 

npm install 模块:安装好后不写入package.json中

npm install 模块 --save 安装好后写入package.json的dependencies中(生产环境依赖)

npm install 模块 --save-dev 安装好后写入package.json的devDepencies中(开发环境依赖)

示例:

我在项目下安装webpack:进入项目终端输入npm install

安装完毕后我的package.json

卸掉webpack再重装:输入npm install webpack --save后:

卸掉webpack再重装:npm install webpack --save-dev后:

 

回到顶部

利用npm删除包

删除模块其实很简单:

 

删除全局模块

npm uninstall -g <package>利用npm

删除本地模块

npm uninstall 模块

 

删除本地模块时你应该思考的问题:是否将在package.json上的相应依赖信息也消除?

npm uninstall 模块:删除模块,但不删除模块留在package.json中的对应信息

npm uninstall 模块 --save 删除模块,同时删除模块留在package.json中dependencies下的对应信息

npm uninstall 模块 --save-dev 删除模块,同时删除模块留在package.json中devDependencies下的对应信息

 

回到顶部

利用npm 发布包

发布包之前你首先要有一个npm的账号

第一次发布包:

在终端输入npm adduser,提示输入账号,密码和邮箱,然后将提示创建成功

非第一次发布包:

在终端输入npm login,然后输入你创建的账号和密码,和邮箱,登陆

【注意】npm adduser成功的时候默认你已经登陆了,所以不需要再接着npm login.

 

例子:

 

(因为我已经创建过账号了,所以直接登录)

1.进入项目目录下,然后再登陆:

 

2.通过npm publish发包

 

包的名称和版本就是你项目里package.json里的name和version哦!

 

3然后你到npm的搜索里就可以找到被发布的APP啦!

 

【注意点1】不能和已有的包的名字重名!

例如我尝试把包名改成'react'显然已有的包:

 

然后发包的时候就会...

(翻译:你没有发布react包的权限,请问你是以react所有者的身份登陆的吗?)

【提示】在发包前可以通过npm的搜索引擎查找是否已存在相同名称的包

 

【注意点2】还有一点要注意的是npm对包名的限制:不能有大写字母/空格/下滑线!

(其实在上面的例子中我原本打算写成penghuwanAPP的,报错。。。改成penghuwan_app,又报错,最后不得不改成penghuwanapp。。。)

 

 

【注意点3】你的项目里有部分私密的代码不想发布到npm上?

将它写入.gitignore 或.npmignore中,上传就会被忽略了

 

回到顶部

利用npm撤销发布包

这里要说一点,取消发布包可能并不像你想象得那么容易,这种操作是受到诸多限制的,撤销发布的包被认为是一种不好的行为

(试想一下你撤销了发布的包[假设它已经在社区内有了一定程度的影响],这对那些已经深度使用并依赖你发布的包的团队是件多么崩溃的事情!)

 

示例:

我现在将之前发布的包penghuwanapp撤销掉:输入npm unpublish 包名

 【吐槽】注意看红框框住的字,你就知道npm官方撤销已发布的包对这种行为的态度了....

 【注意】如果报权限方面的错,加上--force

 

再去npm搜索已经搜不到了

 

1根据规范,只有在发包的24小时内才允许撤销发布的包( unpublish is only allowed with versions published in the last 24 hours)

2即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被“占用”了)

 

例如我在撤销包后尝试再发布同一名称+同一版本的包:

报错,并建议我修改包的版本

 

npm unpublish的推荐替代命令:npm deprecate <pkg>[@<version>] <message>

使用这个命令,并不会在社区里撤销你已有的包,但会在任何人尝试安装这个包的时候得到警告

例如:npm deprecate penghuwanapp '这个包我已经不再维护了哟~'

 

回到顶部

npm更新发布后的包:

事实上npm更新包和发布包的命令是一样的,都是npm publish,不同之处在于,你需要修改包的版本

 

所以步骤是:

1.修改包的版本(package.json里的version字段)

2.npm publish

关于修改版本的细节请看下面:

 

七.npm的版本控制——Semantic versioning

在我们的package.json里面有一个version字段。那么,怎么在项目不断构建的过程中调整版本呢?

npm有一套自己的版本控制标准——Semantic versioning(语义化版本)

 

具体体现为:

对于"version":"x.y.z"

1.修复bug,小改动,增加z

2.增加了新特性,但仍能向后兼容,增加y

3.有很大的改动,无法向后兼容,增加x

 

例如:我原本的项目是1.0.0版本的话

若是1中情况,变为1.0.1

若是2中情况,变为1.1.0

若是3中情况,变为2.0.0

 

通过npm version <update_type>自动改变版本

update_type为patch, minor, or major其中之一,分别表示补丁,小改,大改

 

例如我在shell去改动项目版本

 

再来看看我的package.json,已经变成了v1.0.0

资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 在心电信号处理领域,实验(一)“心电2”主要聚焦于心电图(ECG)信号的分析与处理。心电图是记录心脏电生理活动的重要工具,被广泛用于临床诊断和健康监测。本实验的核心内容分为两部分:一是模拟数据的使用,二是RST波的检测。 实验中使用的ECG.mat文件包含了心电图信号的模拟数据。在实际研究和教学中,模拟数据常被用来代替真实采集的数据,因为它们能够精确控制、重复生成,且便于开展各种假设性实验。这些模拟数据可能包含正常的心电信号波形,如P波、QRS复合波和T波,也可能包含异常情况,如心律不齐、早搏等。通过对这些模拟信号的分析和处理,可以深入理解心电图的基本特征,并学习如何提取有用信息,例如心跳周期、心率等。 peakdetect.m是Hooman Sedghamiz在2014年编写的RST波检测程序。RST波,尤其是QRS复合波,是心电图分析的关键部分,因为它标志着心脏心动周期中的一个关键阶段——心室激动。该程序采用基于状态机逻辑的算法,这种算法通常涉及一系列预定义的状态,每个状态对应于心电信号的不同特征或变化。通过这种方式,程序能够有效识别和定位QRS波群,从而计算出心率和其他相关参数。状态机方法在信号处理中具有良好的鲁棒性和适应性,能够处理不同质量和复杂性的ECG信号。在心电信号检测中,峰检测是一个核心步骤,它涉及寻找信号中的局部最大值。peakdetect.m可能包含了对信号平滑、阈值设定、波形匹配等预处理步骤,以减少噪声影响并准确捕捉到QRS波的起点和终点。这一过程对于识别异常心律、诊断心律失常至关重要。 在实验过程中,学生和研究人员可以利用ECG.mat数据和peakdetect.m程序进行以下实践操作:1. 加载并可视化心电图信号,了解其基本形态和特征;2. 运行peakdet
斑马 Zebra ZT410 是一款工业条码打印机,具有打印速度快、分辨率可选、连接方式多样等特点,适用于快递物流、服装、医疗等多个行业: 打印性能: 打印方式:支持热印和直热式热敏两种打印方式,可根据不同需求灵活选择。 分辨率:标准分辨率为 203dpi,还可选配 300dpi 或 600dpi,能满足不同精度要求的打印任务。 打印速度:最大打印速度可达 14ips(每秒 356 毫米),可快速完成大量标签打印工作。 打印宽度与长度:最大打印宽度为 4.09 英寸(104 毫米)。不同分辨率下打印长度不同,203dpi 时为 3988 毫米,300dpi 时为 1854 毫米,600dpi 时为 991 毫米。 内存配置:标配 256MB RAM 内存和 512MB 闪存,可存储大量标签格式和数据,确保打印任务的顺畅进行。 介质与碳带: 介质类型:支持连续纸、模切纸、有凹口的纸、黑标纸等多种介质。 介质尺寸:介质卷筒宽度(标签和底纸)为 1.00 英寸(25.4 毫米)至 4.50 英寸(114 毫米)(撕 / 切纸器),或 1.00 英寸(25.4 毫米)至 4.25 英寸(108 毫米)(剥离 / 回卷),非连续标签最大长度为 39 英寸(991 毫米)。 碳带规格:碳带标准长度为 450 米,宽度为 2.00 英寸(51 毫米)至 4.33 英寸(110 毫米),碳带墨面向外卷绕,也可选配墨面向内卷绕的碳带卷轴。 接口与连接:配备 USB 2.0、高速 RS-232 串行、10/100 以太网、蓝牙 2.1 等接口,还可选择并行接口,支持 ZebraNet 打印机服务器,能连接多种设备,实现便捷的数据传输和网络打印。 外观与结构:采用金属框架和具有超大透明视窗的两折金属介质盖,结构坚固耐用。侧面加载耗材路径,方便介质和碳带的装载。机身尺寸为 495
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值