一、npm简介
npm,全称是 Node Package Manager,通俗的说就是使用一台服务器集中管理一些第三方的依赖库,比如jQuery、Bootstrap等,方便下载使用。npm是Node.js的包管理器。它作为一个开源项目旨在帮助JavaScript开发人员轻松共享打包的代码模块。npm由三个独立的部分组成:网站,注册表(registry),命令行工具(CLI)。
在www.npmjs.com可以搜索第三方包,开发者发布在这个网站上的,npm命令就是在这个网站上下载第三方包。
npm的第二层含义就是一个命令行工具,只要你安装了node就已经安装了npm,npm也有版本的概念,输入 npm –version查看版本,升级npm npm install - -global npm
二、安装node环境:
1.前往node官网下载node安装包 下载 | Node.js 中文网
2.选择对应操作系统的.msi安装包,下载到本地后一键点击下一步安装即可,安装完成后在cmd控制台中输入node -v查看当前安装的版本,若能够查看安装版本,则证明node环境安装成功。
3.随后在控制台中输入指令 npm install npm -g 全局安装npm,这样才能在全局环境下使用npm
4. 随后就可以在电脑的任何路径打开控制台使用npm命令了
三、npm项目初始化
建议每一个项目都要有一个package.json文件(包描述问价,相当于产品的说明书),这个文件可以通过 npm init的方式初始化出来,该文件中最有用的是dependencies选项,可以用来保存第三方包的依赖信息。
安装的依赖包会统一安装到项目的node_modules文件下。
建议执行npm install 包名的时候 都加上- - save这个选项,目的是在package.json的dependencies选项下保存生产依赖项信息(开发和部署时候都需要的)。如果node_modules删除了只需要 npm install就会自动把package.json中的dependencies中的所有依赖项下载回来,版本5以后就不用加了会自动添加;devDependencies开发依赖模块(只有开发的时候需要的模块);scripts配置本地可执行命令
示例1:在script中配置一条npm可执行命令用于将项目中的less文件转换为css
-
{
-
"scripts":{
-
"less":"lessc 1.less 1.min.css -x"
-
}
-
}
这样就能在当前项目的终端下使用npm run less 进行less文件的转换操作,相当于执行了lessc 1.less 1.min.css -x这条webpack命令。
示例2:在配置可执行脚本命令的时候,基于process的环境变量区分开发环境还是生产环境
-
"scripts":{
-
"serve":"set NODE_EVN=dev&&node index1.js",
-
"build":"set NODE_EVN=pro&&node index1.js"
-
}
上述配置中 set NODE_ENV=dev 代表设置全局环境变量,但在MAC中使用 export NODE_ENV=dev
在index1.js中获取script中设置的环境变量进行判断
-
let n = process.env.NODE_EVN;
-
if(n === 'dev') {
-
console.log('开发环境下执行');
-
} else {
-
console.log('生产环境下执行');
-
}
2. 关于package-lock.json
在npm5以前是不会有package-lock.json这个文件的,之后才加入。当安装包的时候npm会自动生成或者更新package-lock.json这个文件,它会保存node_modules中所有包的信息(版本,下载地址),这样重新执行npm install的速度会更快一些; 也可以锁定版本,防止执行npm install时下载新的版本(如果项目依赖1.1.1版本,但重新下载会下载最新版本)
四、常用命令
- npm init npm init –y:快速生成package.json文件,跳过向导,所有选项默认
- npm install 包名:下载指定的模块
- npm install 包名 --save:把模块保存在清单生产依赖中 (简写npm i –S 包名)
- npm install 包名 --save-dev:把模块保存在清单开发依赖中
- npm install:一次性把dependencies中的所有依赖项下载回来(开发 + 生产环境)
- npm install --production:只安装生产依赖的模块
- npm install 包名 -g(--global):把模块安装在全局环境中
- npm uninstall 包名:只删除,如果有依赖项会依然保存
- npm uninstall --save:删除的同时也会把依赖项给删除 npm un –S 包名
- npm help:查看npm使用帮助
- npm install 包名@版本号 --save:下载指定版本的包
- npm 命令 --help:查看指定命令的使用帮助
- npm config list:查看npm配置信息
- npm view 包名 versions > 包名.versions.json:查看某个模块的版本信息,输出到指定的模块中
- npm root -g:查看全局安装模块的目录
五、解决npm被墙
使用cnpm
npm存储包的服务器在国外,有时会被墙,速度很慢,淘宝的开发团队把npm在国内做了一个备份 ---> 中国 NPM 镜像
安装淘宝的cnpm:npm install –global cnpm
接下来安装包的时候把之前的npm替换成cnpm,npm就会通过淘宝的服务器下载(在任意目录下都可以执行,global是安装到全局的意思)
如果不想安装cnpm又想使用淘宝的服务器来下载安装:
npm install jquery –registry=https://registry.npm.taobao.org
可以将这个选现加入配置文件中
npm config set registry https://registry.npm.taobao.org
只要经过上面命令的配置,所有的npm install都会默认从淘宝的服务器下载。
yarn常用指令
可以使用yarn代替npm安装项目依赖,它的安装速度要比npm要快(npm 的两倍至三倍),使用 npm i yarn -g 安装yarn
- yarn init -y:生成package.json文件
- yarn install:一次性把dependencies中的所有依赖项下载回来(跑环境)
- yarn add 包名@x.xx.xx:下载指定的模块
- yarn remove 包名:移除指定的模块
基于nrm切源提高npm速度
首先安装nrm:npm install nrm -g
查看有哪些源:nrm ls
切源:nrm use xxx
一般切源到taobao,即使用指令 nrm use taobao
六、什么情况下把模块安装在全局?
使用npm install 包名 -g安装在全局下的模块,对任何项目都有作用(可能会导致版本冲突),只能基于命令的方式管理,不能基于CommonJS中的require导入使用(不能导入到文件中基于代码来处理)。
可以使用指令npm root -g查看全局安装模块的目录,一般安装在本地电脑c盘AppData/Roaming/npm文件夹下,之所以可以对安装在全局下的xxx模块使用对应的命令进行操作,是因为在该文件下存在xxx.cmd的文件;
安装在本地的模块,可以在项目中导入基于代码操作,不能基于命令来操作。但是可以通过package.json中的scripts配置一些npm的可执行命令,配置后通过 npm run xxx 运行。