NPM (node package manage)
目的: 实现项目中模块的管理
[含: 模块的安装和管理],以及对全局模块的管理;
-
安装
-
node后,会自带NPM 👉nodejs.org/en/ 安装稳定版(LTS长期支持版本);
-
查看安装的版本: node --version (node -v) npm--version;
-
安装在本地的模块在项目目录的node_modules文件夹中;
-
安装在全局的模块的查看: npm root -g
-
安装在全局的特点:
- 一般来讲,安装在全局的模块是可以使用命令的,例如:
- $ npm i pm2 -g 👉 才可以使用 pm2 --version等命令
- 为啥? 👉安装在全局的模块,会有一个xxx.cmd的命令文件,所以我们就可以使用xxx的命令;
- 所有的项目都可以使用,但是这样也会出现一个问题: 版本冲突
- 所以真实项目开发中,非必要情况下,我们都是把模块安装在本地而不是全局下
- 一般只有工具类,并且需要命令操作的模块,才会安装到全局:
- pm2 帮助启动后台服务;
- nrm 切换下载源;
- yarn 类似于npm,更快的模块管理工具;
- @vue/cli vue脚手架
- create-react-app react脚手架
- 一般来讲,安装在全局的模块是可以使用命令的,例如:
-
安装到本地项目中:
- 特点:
- 不能直接使用命令,如果需要使用命令,则配置
可执行脚本命令
; - 当前项目中可以调取使用,其他项目用不了(想用的话需要单独安装),但是不会出现多项目版本冲突;
- 不能直接使用命令,如果需要使用命令,则配置
- 操作步骤:
- $ 进入到指定项目目录
-
$ npm init -y 创建一个package.json模块管理清单 [如果已经存在则不需要再次创建]; 👉注意: 项目文件夹中的名字不要出现特殊符号,中文汉字,大写字母等(最好是只出现小写字母 数字 下划线)
- 作用1: 存储项目需要依赖的模块及版本号[开发依赖和生产依赖];
- 作用2: 配置可执行脚本命令;
- 作用3: 还可以提供一些工程化打包的配置项;
- ....
-
$ npm i xxx 安装指定模块到
生产依赖
i xxx --save i xxx -S$ npm i xxx --save -dev 安装指定模块到
开发依赖
中 i xxx -D 生产依赖: 开发时需要,部署到服务器上也需要 [例如 axios]; 开发依赖: 只有开发时需要,部署到服务器上不需要[例如: less]; -
跑环境 按照package.json中的清单,把所需要的模块安装一遍; npm i --production只把生产依赖安装;
-
- $ 进入到指定项目目录
- 特点:
-
安装源: www.npmjs.com
- 因为是国外的网站,所以速度特别慢;
- 要想提高安装速度:
@1 改变安装源;
- 使用cnpm作为模块管理,这是基于
淘宝镜像源
👉 $ npm i cnpm --global (和npm的使用一模一样); - 也可以基于
nrm
来切换安装源 👉 $ npm i nrm -g 安装全局的nrm
- nrm ls 查看安装源;
- nrm use xxx 使用某个源;
npm
,换做yarn
作为模块管理(推荐);- yarn安装的速度要比npm快很多;
- yarn的语法和npm不一样:
- 安装某个依赖: yarn add xxx xxx@版本号 xxx@latest xxx@next
- 安装生产依赖: yarn add xxx;
- 安装开发依赖: yarn add xxx -D;
- 跑环境: yarn install(或者直接简写 yarn );
- 移除某个依赖: yarn remove xxx;
👉注意:
yarn
一般不安装全局依赖,如果要安装全局依赖,还是用npm比较合适;
- 使用cnpm作为模块管理,这是基于
-
-
使用
-
把需要使用的模块安装在全局 👉 npm install (简写为:i) xxx -g (--global) 👉例如: npm i xxx -g
- 可以同时安装多个全局,例如: npm i aa bb cc -g
- 注意: 如果是[MAC]电脑,在npm前面要加上
sudo
,例如:sudo npm i aa bb cc -g
-
基于NPM可以安装当前模块的任何一个版本[好处] 👉 npm i xxx@3 👉安装第三代中的最新版本 xxx@3.2.1 👉安装指定的版本号 xxx@latest 👉安装最稳定版本 xxx@next 👉安装尝鲜版
-
把需要使用的模块安装到本地的项目中
- 进入到本地目录 👉 npm i xxx
-
如何让安装在本地的模块也可以使用命令[默认安装在本地的模块是不能使用命令的];
- 在package.json中配置可执行的命令:在"scripts"中执行对应的属性名,例如: npm run xxx
- 在.bin目录中
-
-
卸载
- npm uninstall xxx 卸载安装的模块 xxx -g 卸载安装在全局的模块
pm2(node服务启动管理工具)
- 如果基于node server.js 启动服务后,窗口关闭,服务立即停止! 但是我们期望服务只要启动,窗口关闭,服务也可以正常的进行下去[重启电脑,服务消失,需要重新启动]!
- 进入到指定的目录,通过$ pm2 start server.js --name CRM CRM是自己起的名字;
- pm2 list 查看正在启动的服务;
- pm2 restart CRM 如果后台代码发生更改,需要重启服务;
- pm2 stop CRM 结束服务(但依然在 pm2 list列表中);
- pm2 del CRM 从list中删除服务;
- 每次关机,需要执行$ pm2 start... pm2 是隐藏启动报错的,如果无法正常启动,先基于node server.js启动,看看报错,等到解决错误后,先保证node server.js可以正常启动,然后关闭服务之后,再基于pm2启动!
扫盲1:
- 一个模块的诞生:
- 开发阶段:
- 内测阶段(alpha阶段)
- 公测阶段(beta版)
- 正式发版(stable) [有一个过渡期,在过渡期内我们想安装这个版本,需要加@next]
- npm view xxx versions 👉查看某个依赖的所有版本信息
扫盲2: 打开电脑的终端命令窗口(DOS命令窗口),执行对应的命令;
- [windows] 👉 win键+r 👉 出现运行窗口 👉 输入cmd 👉 打开命令窗口 👉 执行对应的命令
此时所在的是用户根目录
- 想进入到指定的目录执行命令:
- 在指定地址栏中输入cmd即可;
- 部分操作系统支持
shift+右键👉在此处打开命令窗口
; - 也可以基于DOS命令,进入到指定的磁盘目录下:
- 磁盘符: 进入到指定的磁盘;
- cd 文件目录地址: 进入到指定的目录;
- [MAC] 👉找到
中端命令
程序打开,此时相当于在用户根目录下来执行命令,如果想进入到指定的目录只能cd + 路径地址
(直接把文件拖进来,就可以有路径地址)