1、什么是npm
Npm(Node Package Manager) 是node的包管理工具,每个包都是一个模块,所以也可以说npm是node的模块管理工具。
2、下载
淘宝镜像地址:http://npm.taobao.org/
3、复制文件存放路径
4、配置变量
系统属性 - 高级 - 环境变量 - Path
5、npm安装完成
6、安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
安装完后查看版本
cnpm -v
成功后会有版本信息返回
7、永久替换为cnpm
npm config set registry https://registry.npm.taobao.org
切换为npm
npm config set registry https://registry.npmjs.org
Cnpm 支持 npm 除了 publish 之外的所有命令,使用时只要在npm前面加上一个c即可,其他不变。
8、更新cnpm或npm
cnpm update -g
9、使用npm/cnpm安装包的两种方式
本地安装
cnpm install(i)
模块名
如cnpm install jquery, install可以缩写为i
本地安装安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块,供项目require()进行使用。
安装模块如不指定版本号 默认会安装最新的版本,
全局安装
cnpm install jquery -g
在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。全局的安装是供命令行使用的。
安装指定版本
npm install [email protected]
如果想要安装指定版本,可以在库名称后加 @版本号:
卸载包
npm uninstall moudleName
【需要一个package.json文件】
更新包
npm update moudleName
【需要一个package.json文件】
其他命令
查看包地址
npm view moduleName repository.url
查看帮助信息
npm help
发布一个npm包的时候,需要检验某个包名是否已存在
npm search packageName
10、Package.json
package.json是一个描述文件,描述了你项目中各个包之间的关系
一个 package.json 文件可以有以下几点作用:
-
作为一个描述文件,描述了你的项目依赖哪些包
-
允许我们使用 “语义化版本规则”(后面介绍)指明你项目依赖包的版本
-
让你的构建更好地与其他开发者分享,便于重复使用
package.json如何创建
使用 npm init 即可在当前目录创建一个 package.json 文件:
输入 npm init 后会弹出一堆问题,我们可以输入对应内容,也可以使用默认值。在回答一堆问题后输入 yes就会生成 package.json 文件。
如果嫌回答这一大堆问题麻烦,可以直接输入 npm init --yes 跳过回答问题步骤,直接生成默认值的 package.json 文件
package.json内容
package.json 文件至少要有两部分内容:
“name”
· 全部小写,没有空格,可以使用下划线或者横线
“version”
· x.x.x 的格式
· 符合“语义化版本规则”
比如:
{ "name":"shixinzhang-demo-package"},"version:"1.0.0"
-
description:描述信息,有助于搜索
-
main: 入口文件,一般都是 index.js
-
scripts:支持的脚本,默认是一个空的 test
-
keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目
-
author:作者信息
-
license:默认是 MIT/ISC
-
bugs:当前项目的一些错误信息,如果有的话
我们可以为 init 命令设置一些默认值,比如:
npm set init.author.email "[email protected]"
npm set init.author.name "shixinzhang"
npm set init.license "MIT"
注意: 如果 package.json 中没有 description 信息,npm 使用项目中的 README.md 的第一行作为描述信息。这个描述信息有助于别人搜索你的项目,因此建议好好写 description 信息。
11、指定依赖的包
我们需要在 package.json 文件中指定项目依赖的包,这样别人在拿到这个项目时才可以使用 npm install 下载。
包有两种依赖方式:
-
dependencies:在生产环境中需要用到的依赖
-
devDependencies:在开发、测试环境中用到的依赖
举个例子:
{
"name": "my-weex-demo",
"version": "1.0.0",
"description": "a weex project",
"main": "index.js",
"scripts": {
"build": "weex-builder src dist",
"build_plugin": "webpack --config ./tools/webpack.config.plugin.js --color",
"dev": "weex-builder src dist -w",
"serve": "serve -p 8080"
},
"keywords": [
"weex"
],
"author": "[email protected]",
"license": "MIT",
"devDependencies": {
"babel-core": "^6.14.0",
"babel-loader": "^6.2.5",
"babel-preset-es2015": "^6.18.0",
"vue-loader": "^10.0.2",
"eslint": "^3.5.0",
"serve": "^1.4.0",
"webpack": "^1.13.2",
"weex-loader": "^0.3.3",
"weex-builder": "^0.2.6"
},
"dependencies": {
"weex-html5": "^0.3.2",
"weex-components": "*"
}}
12、语义化版本规则
https://docs.npmjs.com/getting-started/semantic-versioning
dependencies 的内容,以 "weex-html5": "^0.3.2" 为例,我们知道 key 是依赖的包名称,value 是这个包的版本。那版本前面的 ^ 或者版本直接是一个 * 是什么意思呢?
这就是 npm 的 “Semantic versioning”,简称”Semver”,中文含义即“语义化版本规则”。
在安卓开发中我们有过这样的经验:有时候依赖的包升级后大改版,之前提供的接口不见了,这对使用者的项目可能造成极大的影响。
因此我们在声明对某个包的依赖时需要指明是否允许 update 到新版本,什么情况下允许更新。
这就需要先了解 npm 包提供者应该注意的版本号规范。
如果一个项目打算与别人分享,应该从 1.0.0 版本开始。以后要升级版本应该遵循以下标准:
-
补丁版本:解决了 Bug 或者一些较小的更改,增加最后一位数字,比如 1.0.1
-
小版本:增加了新特性,同时不会影响之前的版本,增加中间一位数字,比如 1.1.0
-
大版本:大改版,无法兼容之前的,增加第一位数字,比如 2.0.0
了解了提供者的版本规范后, npm 包使用者就可以针对自己的需要填写依赖包的版本规则。
小结一下:总共三种版本变化类型,接受依赖包哪种类型的更新,就把版本号准确写到前一位。
12、根据package.json安装依赖包
npm install 默认会安装 package.json 中 dependencies 和 devDependencies 里的所有模块。
如果想只安装 dependencies 中的内容,可以使用 --production 字段:
npm install --production
安装参数 --save(-S) 和 --save-dev(-D)
npm install
使用下载好的包
下载后 node_modules 文件夹中有要使用的包,我们就可以使用其中的代码了。
比如在 Node.js 项目中,我们可以用 require(XXX) 引入它。
13、如何创建自己的包并进行发布
第一次发布
npm adduser
提示输入账号,密码和邮箱,然后将提示创建成功
非第一次发布
npm login
然后输入你创建的账号和密码,和邮箱,登陆
【注意】npm adduser成功的时候默认你已经登陆了,所以不需要再接着npm login
14、如何撤销自己发布的包
这里要说一点,取消发布包可能并不像你想象得那么容易,这种操作是受到诸多限制的,撤销发布的包被认为是一种不好的行为
(试想一下你撤销了发布的包[假设它已经在社区内有了一定程度的影响],这对那些已经深度使用并依赖你发布的包的团队是件多么崩溃的事情!)
示例:
我现在将之前发布的包penghuwanapp撤销掉:输入npm unpublish 包名
【吐槽】注意看红框框住的字,你就知道npm官方撤销已发布的包对这种行为的态度了....
【注意】如果报权限方面的错,加上--force
可参考地址:https://www.cnblogs.com/chengxs/p/7651653.html
注意
1根据规范,只有在发包的24小时内才允许撤销发布的包( unpublish is only allowed with versions published in the last 24 hours)
2即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被“占用”了)
例如我在撤销包后尝试再发布同一名称+同一版本的包:
报错,并建议我修改包的版本
npm unpublish的推荐替代命令:npm deprecate
使用这个命令,并不会在社区里撤销你已有的包,但会在任何人尝试安装这个包的时候得到警告
例如:npm deprecate penghuwanapp '这个包我已经不再维护了哟~'
14、npm更新发布后的包
事实上npm更新包和发布包的命令是一样的,都是npm publish,不同之处在于,你需要修改包的版本
所以步骤是:
1.修改包的版本(package.json里的version字段)
2.npm publish
关于修改版本的细节请看下面:
15、查看npm的配置
npm config list //查看基本配置
npm config list -l //查看所有配置
npm本地安装与全局安装有什么区别?
npm install grunt
// 本地安装,则是将模块下载到当前命令行所在目录。 npm install -g grunt
//全局安装,模块将被下载安装到【全局目录】中;
npm如何获取全局安装的默认目录?
npm config get prefix
npm如何设置全局安装的默认目录?
npm config set prefix “directory”