npm就是node的包管理工具。node package manage
一、下载安装node与npm
1、下载
简介:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
下载:直接去官网下载,安装的时候选择Add to PATH
验证:安装完了之后,node和npm就一起安装了,验证的命令为
node -v
和npm -v
。
2、修改 node保存位置
注:如果只像上面这样子安装的话,接下来安装的所有模块都会自动安装到C盘的node_modules里面,所以我们这里需要修改默认保存位置。
- 1、在安装node.js的文件夹(如
D:\all-env\node
)中,新建两个文件夹node_global
和node_cache
- 2、cmd输入
npm config set prefix "D:\all-env\node\node_global"
和npm config set cache "D:\all-env\node\node_cache"
- 3、增加环境变量
NODE_PATH
值为D:\all-env\node\node_global\node_modules
,在PATH中添加D:\all-env\node\node_global
测试位置是否修改成功:cmd输入
npm install express -g
,发现express是安装在手动指定的那个位置
3、配置npm
- 1、查看当前npm配置:
npm config edit
, 可以弹出当前npm配置的txt文件,直接修改这个txt文件,就是修改对应的npm配置- 2、设置npm代理:直接修改
npm config set proxy=http://127.0.0.1:8087和npm config set https-proxy http://server:port
- 有时候内网无法 直接用npm,就需要设置代理了。当然这个代理也可以直接到 上面那个config edit 弹出的txt文件里面去设置
- 设置代理用户名和密码
npm config set proxy http://username:password@server:port npm confit set https-proxy http://username:password@server:port
,这个不一定要用- 3、修改npm的模块下载仓库:
npm install -g cnpm --registry=registry_url
,registry_url指的是国内提供的一些npm仓库地址,有两个https://registry.npm.taobao.org
或者http://r.cnpmjs.org/
。如npm install -g cnpm --registry=https://registry.npm.taobao.org
- 4、使用cnpm:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm
- 配置cnpm路径到环境变量:首先找到cnpm的路径,一般是在node的安装目录
D:\all software\allEnv\node\node_cache
,会有一个cnpm和cnpm.cmd
文件(进入这个路径运行cnpm -v
是会成功的)。然后把这个路径添加到环境变量path里面去,就好了- 是否安装成功:
cnpm -v
- 5、设置npm为淘宝镜像(这个好像没用):npm config set registry http://registry.npm.taobao.org/
- 6、还原:npm config set registry https://registry.npmjs.org/
- 7、临时使用淘宝镜像:npm --registry https://registry.npm.taobao.org install express
4、安装nvm
nvm: 这个是nodejs的版本管理工具,可以直接切换多个nodejs版本。感觉应该还是毕竟好用的
- 下载安装:github搜索nvm-windows,然后往下面拉,就可以看到下载链接了
- nvm命令如下:
nvm list
: 查看当前所有的 node 版本nvm install v10.13.0
: 安装指定的node版本nvm use --delete-prefix 10.13.0
切换到指定的版本
二、NPM基本使用
注:为什么要保存至package.json?因为其他开发者使用(命令提示符执行npm install,则会根据package.json下载所有需要的包)。
- 1、npm安装插件:npm install [-g] [–save-dev]
- 2、-g:全局安装。全局安装可以通过命令行在任何地方调用它
- 3、–save:将保存配置信息至package.json(package.json是nodejs项目配置文件);
- 4、-dev:保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点;
- 5、使用npm卸载插件:npm uninstall [-g] [–save-dev]
- 6、使用npm更新插件:npm update [-g] [–save-dev]
- 7、更新全部插件:npm update [–save-dev]
- 8、查看npm帮助:npm help
- 9、查看当前目录已安装插件:npm list
- 10、
NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。
npx: npx是npm后来加的一个功能。npm的m是Management,npx的x可以理解为execute。有些包需要用命令行调用,但不需要全局安装,这时npx就起作用了。比如当执行
npx xxx
的时候,先看xxxz在$path里面有没有,如果没有,就找当前目录的node_modules里面有没有,还是没有的话,才安装xxx来执行
1、npm init 在项目中引导创建一个package.json文件
- (1)基础语法: 安装包的信息可保持到项目的package.json文件中,以便后续的其它的项目开发或者他人合作使用,也说package.json在项目中是必不可少的。
npm init [-f|--force|-y|--yes]
2、npm install安装模块
- (-1)
npm install
报错:Can't find Python executable "python", you can set the PYTHON env variable
。原因为node里面有的包依赖于python,所以需要装python环境。直接去官网下载python(必须要2.7的版本,3的版本不行),然后安装好了之后添加到环境变量就好了
- (0)package-lock.json文件:这个文件是npm 5之后版本出来的,用来锁定当前的版本号。
- 因为之前
npm install
的时候是根据package.json来安装,所以可能出现安装的版本不一致,导致错误。不过现在如果有package-lock.json就会先读取这个package-lock.json,而后再读取package.json。- 以前更新包:直接改package.json里面的版本,然后再npm install了。不过5版本后就不支持这样做了,因为版本已经锁定在package-lock.json里了,修改package.json里面的版本号已经不起作用了
- 现在更新包:现在只能
npm install xxx@x.x.x
这样去更新我们的依赖,然后package-lock.json也能随之更新
- (1)基础语法: npm install之后,package-lock.json里面的所有模块都会被自动安装到开发目录下的node_modules下
- npm install的缺点:npm 5.0之后这些缺点已经不明显了
- <1>npm install的时候巨慢。特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。
- <2>同一个项目,安装的时候无法保持安装的版本一致性。由于package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,下面三个版本号在安装的时候代表不同的含义。
- “5.0.3”: 表示安装指定的5.0.3版本。三个数字依次为主版本号、次版本号和补丁版本号
- “~5.0.3”: 表示安装5.0.X中最新的版本
- "^5.0.3: 表示安装5.X.X中最新的版本
- <3>安装的时候,包会在同一时间下载和安装,中途某个时候,一个包抛出了一个错误,但是npm会继续下载和安装包。因为npm会把所有的日志输出到终端,有关错误包的错误信息就会在一大堆npm打印的警告中丢失掉,并且你甚至永远不会注意到实际发生的错误。
- 直接安装,默认会安装最新的版本,且为本地安装(local):
npm install gulp
- 安装指定版本: 由于npm update不是很好用,所以这个也可以当成更新来使用,可以指定升级到指定版本。安装包并将信息保持到项目的package.json文件中。
npm install gulp@3.9.1
- 关于package.json里面模块名字前面的@types: 表示这个模块需要先到node_modules里面的@types文件夹里面去查找,如果没找到的话,再到外面找。如
"@types/react": "^16.8.1"
// @scope表示作用域 -g或者local(不加)
npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <tarball file>
npm install <tarball url>
npm install <folder>
alias: npm i
common options: [-S|--save|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [--dry-run]
npm install @types/react@16.9.23 --save-dev // 开发环境依赖
npm install @types/react-dom@16.9.5 --save-dev // 开发环境依赖
npm install react@16.8.6 --save // 生产环境依赖
npm install react-dom@16.8.6 --save // 生产环境依赖
- (2)package.json文件中,项目依赖的版本号的表示方法如下:项目对模块的依赖可以使用下面的 3 种方法来表示(假设当前版本号是 1.1.0 )
- 项目版本的顺序:alpha版本之后是beta版本,之后是候选版,最后是正式版。
- Alpha版本: 内部测试版。这个版本是指,这些版本是第一次发布,也是最不稳定的.大多数报告的错误包括严重缺陷都被解决了,但仍有一部分明显暴露出来的问题,其中可能还会包含安全问题…但是可以满足一般需求。
- beta版本: 外部测试版。这个版本是指,所有有关关键数据丢失和安全漏洞的解决.当前版本的API不再改变了,让贡献模块和贡献主题的作者可以开始升级他们的项目.大多数的升级路径问题解决了,并且能成功升级Druapl.org的数据库到新的Drupal版本中.。beta版本通常只面向部分用户开放,当然也可能面向所有用户开放,如果是面向所有用户开发,这个过程就叫做公测
- 发布候选版: 候选版通常只在没有严重的漏洞被报告的时候再已有的beta版上建立的.这些版本被认为代码已经接近稳定,一些Drupal开发社区还认为候选版相当于官方的 .0 版本.此时,不会有更多的可用功能更改,可翻译字符串通常不再变化.
如:v5.0.0-beta.9 v5.0.0-alpha.32
兼容模块新发布的补丁版本:~1.1.0、1.1.x、1.1
兼容模块新发布的小版本、补丁版本:^1.1.0、1.x、1
兼容模块新发布的大版本、小版本、补丁版本:*、x
"antd": "^4.0.0-rc.1"
- (3)安装命令的一些后缀
- <1>
-S, --save
: 安装包信息将加入到package.json的dependencies(生产阶段的依赖)里面。npm install gulp --save 或 npm install gulp -S
。"dependencies": {"gulp": "^3.9.1"}
- <2>
-D, --save-dev
: 安装包信息将加入到package.json的devDependencies(开发阶段的依赖)里面,所以开发阶段一般使用它。npm install gulp --save-dev 或 npm install gulp -D
。"devDependencies": {"gulp": "^3.9.1"}
- <3>
-O, --save-optional
: 安装包信息将加入到package.json的optionalDependencies(可选阶段的依赖)里面,这个一般比较少。npm install gulp --save-optional 或 npm install gulp -O
。"optionalDependencies": {"gulp": "^3.9.1"}
- <4>
-E, --save-exact
: 这个和-S,--save
命令很像。安装包信息依然是加入到package.json的dependencies(生产阶段的依赖)里面,只不过这个安装之后,版本号前面没有^。npm install gulp --save 或 npm install gulp -S
。"dependencies": {"gulp": "3.9.1"}
- <5>
-g 或 --global
: 这个即一个全局安装,安装在全局目录,不加后面这个-g就是局部安装。npm install gulp -g
3、npm uninstall卸载模块
- (1)基础语法: 后面的后缀和上面的是一样的
npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional]
aliases: remove, rm, r, un, unlink
4、npm update 更新模块
- (1)基础语法: 这个不是很好用,如果要升级到指定版本,还是用npm install安装指定版本的好。后面的后缀和上面的是一样的。这个update后面跟上版本号,好像是无效的。
- 运行npm update之前需要运行npm outdated来查版本。而且这个npm update是把模块从npm outdated检查出来的Current版本,升级到Wanted版本。如,npm outdated命令之后,gulp模块Current版本为2.0.0,Wanted版本为2.7.0,Latest版本为4.0.2,那么执行npm update gulp,则只会升级到Wanted的2.7.0版本
npm update [-g] [<pkg>...]
5、npm outdated 检查已经过时的模块的Current、Wanted、Latest
- (1)基础语法: 此命令会列出所有已经过时的包,对应的Current版本、Wanted版本和Latest版本。
// 列出过时的模块的Current版本、Wanted版本和Latest版本
npm outdated [[<@scope>/]<pkg> ...]
6、npm ls 查看安装的模块
- (1)基础语法: 查看安装的模块及依赖
npm ls [[<@scope>/]<pkg> ...]
aliases: list, la, ll
7、npm help 查看某条命令的详细帮助
- (1)基础语法: 例如输入npm help install,系统在默认的浏览器或者默认的编辑器中打开本地nodejs安装包的文件/nodejs/node_modules/npm/html/doc/cli/npm-install.html
npm help <term> [<terms..>]
npm help install
8、npm root 查看包的安装路径
- (1)基础语法: 输出 node_modules的路径
npm root [-g]
9、npm config 管理npm的配置路径
- (1)基础语法: 输出 node_modules的路径
- <1>对于config这块用得最多应该是设置代理,解决npm安装一些模块失败的问题。例如我在公司内网,因为公司的防火墙原因,无法完成任何模块的安装,这个时候设置代理可以解决。
npm config set proxy=http://xxx
- <2>又如国内的网络环境问题,某官方的IP可能被和谐了,幸好国内有好心人,搭建了镜像,此时我们简单设置镜像。
npm config set registry="http://r.cnpmjs.org"
- <3>也可以临时配置,如安装淘宝镜像。
npm install -g cnpm --registry=https://registry.npm.taobao.org
npm config set <key> <value> [-g|--global]
npm config get <key>
npm config delete <key>
npm config list // 列出所有配置
npm config edit
npm get <key>
npm set <key> <value> [-g|--global]
10、npm cache 管理模块的缓存
- (1)基础语法: 最常用命令无非清除npm本地缓存
npm cache clean
npm cache add <tarball file>
npm cache add <folder>
npm cache add <tarball url>
npm cache add <name>@<version>
npm cache ls [<path>]
npm cache clean [<path>]
11、npm start 启动模块
- (1)基础语法:
- 该命令写在package.json文件scripts的start字段中,输入之后,则运行,他后面对应的命令。如:
"scripts": {"start": "gulp -ws"}
,此时在cmd中输入npm start命令相当于执行gulpfile.js文件自定义的watch和server命令- 如果package.json文件没有设置start,则将直接启动node server.js
npm start [-- <args>]
12、npm stop 停止模块
- (1)基础语法:
npm stop [-- <args>]
13、npm restart 重新启动模块
- (1)基础语法:
npm restart [-- <args>]
14、npm test 测试模块
- (1)基础语法:
- 该命令写在package.json文件scripts的test字段中,可以自定义该命令来执行一些操作
- 如:
"scripts": {"test": "gulp release"},
,此时在cmd中输入npm test命令相当于执行gulpfile.js文件自定义的release命令。
npm test [-- <args>]
npm tst [-- <args>]
15、npm version 查看npm版本
- (1)基础语法:
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]
'npm [-v | --version]' to print npm version
'npm view <pkg> version' to view a package's published version
'npm ls' to inspect current package/dependency versions
16、npm view 查看模块对应的一些信息
- (1)基础语法: 这个还是好用,上面的npm outdated不一定可以用
npm view [<@scope>/]<name>[@<version>] [<field>[.<subfield>]...]
npm view <pkg> dependencies // 查看模块的依赖关系
npm view <pkg> repository.url // 查看模块的源文件地址
npm view <pkg> contributors // 查看模块的贡献者,包含邮箱地址
npm view <pkg> version // 查看模块的版本。这个是查看,对应模块的Latest版本
aliases: info, show, v
npm view babel-plugin-transform-class-properties
17、npm adduser 用户登录
- (1)基础语法: 发布模板到npm社区前需要先登录,然后再进入发布的操作
npm adduser [--registry=url] [--scope=@orgname] [--always-auth]
18、npm publish 发布模块
- (1)基础语法:
npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]
Publishes '.' if no argument supplied
Sets tag 'latest' if no --tag specified
19、npm access 在发布的包上设置访问级别
- (1)基础语法:
npm access public [<package>]
npm access restricted [<package>]
npm access grant <read-only|read-write> <scope:team> [<package>]
npm access revoke <scope:team> [<package>]
npm access ls-packages [<user>|<scope>|<scope:team>]
npm access ls-collaborators [<package> [<user>]]
npm access edit [<package>]