[Java教程]利用npm安装/删除/发布/更新/撤销发布包

0 2017-06-10 00:00:32

一.什么是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 利用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 [@]

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

例如: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为patch, minor, or major其中之一,分别表示补丁,小改,大改

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

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

【完】

本文网址:http://www.shaoqun.com/a/309903.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

0

java撤销删除_[Java教程]利用npm安装/删除/发布/更新/撤销发布包相关推荐

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

    https://www.cnblogs.com/penghuwan/p/6973702.html 利用npm安装包 什么时候用本地/全局安装? 1.当你试图安装命令行工具的时候,例如 grunt CL ...

  2. npm ------ npm 安装删除命令(rimraf)删除本地依赖包

    通过npm命令来删除node_modules文件夹 1.首先通过npm安装删除工具 npm install rimraf -g 2.安装淘宝镜像后可以使用 cnpm install rimraf -g ...

  3. java list 删除 遍历_Java list利用遍历进行删除操作3种方法解析

    Java list利用遍历进行删除操作3种方法解析 这篇文章主要介绍了Java list利用遍历进行删除操作3种方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需 ...

  4. java rpm卸载_怎样使用rpm命令一次性删除依赖的软件包

    怎样使用rpm命令一次性删除依赖的软件包 搜索了一下网络,发现解法大体有两种: 第一种方法:不管依赖包 相互依赖的软件包,使用rpm的--nodeps参数就搞定了. rpm --nodeps -e g ...

  5. java小朋友猜拳_[Java教程]Java猜拳小游戏(剪刀、石头、布)

    [Java教程]Java猜拳小游戏(剪刀.石头.布) 0 2015-09-29 08:00:04 import java.util.Random;import java.util.Scanner;pu ...

  6. java星空屏幕_[Java教程]窗口设置_星空网

    窗口设置 2016-04-13 0 /** * 这个是GUI的事例程序: * */ package w160412.wang.main;import java.awt.Color; import ja ...

  7. java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)

    作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...

  8. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

  9. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...

    笔者以前学过C++语言.众所周知,C++也是一门面向对象程序设计语言.还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为 ...

最新文章

  1. 难忘的一天——装操系统(五)
  2. POJ 3237 Tree (树链剖分)
  3. php ci rest,在CodeIgniter框架中使用RESTful服务
  4. TensorFlow:实战Google深度学习框架(四)MNIST数据集识别问题
  5. [渝粤教育] 西南科技大学 电器设备及维修 在线考试复习资料
  6. 王道考研 计算机网络17 IP数据报 最大传送单元MTU IP地址 IPv4 子网划分 ARP协议 ICMP协议 移动IP
  7. react-native多图选择、图片裁剪(支持ad/ios图片个数控制)
  8. ORACLE 12C采坑之 ORA-12541:TNS:无监听程序
  9. 【Filebeat】logstash 和filebeat 是什么关系
  10. mysql 事务 异常_mysql事务级别以及相应的异常现象
  11. linux拷贝文件夹到另一台机器,linux肿么一个文件拷贝到另一个文件夹
  12. 实用的Safari浏览器扩展工具——浏览标签太多?来一键保存!
  13. 【转载】数据中心网络架构浅谈
  14. maskrcnn_benchmark代码分析(2)
  15. 汇编语言程序设计——仿win7计算器(功能部分)
  16. UVa Online Judge 工具網站
  17. 易创索讯-SEO网站优化获得销售的6种策略!
  18. 开启codelite的c++11
  19. PHP经典实例(第二版) php实例大全
  20. filepath直接指定到文件名吗_快速实现对文件按时间的重命名

热门文章

  1. shell编写一个简单的jmeter自动化压测脚本
  2. 苹果手机解压缩软件_奇客派 篇六十一:压缩速度贼快,macOS又有一款好用的解压缩软件_软件应用...
  3. spark报Got an error when resolving hostNames. Falling back to /default-rack for all
  4. 数字IC设计知识结构
  5. java分数变小数的函数_用JAVA解决ACM分数变小数
  6. DEDECMS后台无法登陆并跳转回登陆界面的解决方法
  7. 曾国藩《挺经》卷八廉矩
  8. jQuery在线选座系统(高铁版)
  9. Android 自定义指示器NBIndicatorView
  10. 桌面版docker设置代理