👉关于NPM包管理器的学习以及pm2服务启动管理工具

953 阅读2分钟

NPM (node package manage)

image.png 目的: 实现项目中模块的管理 [含: 模块的安装和管理],以及对全局模块的管理;

  • 安装

    • 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中的清单,把所需要的模块安装一遍; npmi把开发和生产依赖都安装一遍;npm i 把开发和生产依赖都安装一遍; npm i --production只把生产依赖安装;

    • 安装源: www.npmjs.com

      • 因为是国外的网站,所以速度特别慢;
      • 要想提高安装速度: @1 改变安装源;
        • 使用cnpm作为模块管理,这是基于淘宝镜像源 👉 $ npm i cnpm --global (和npm的使用一模一样);
        • 也可以基于nrm来切换安装源 👉 $ npm i nrm -g 安装全局的nrm
          • nrm ls 查看安装源;
          • nrm use xxx 使用某个源;
        @2 不使用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比较合适;
  • 使用

    • 把需要使用的模块安装在全局 👉 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 + 路径地址(直接把文件拖进来,就可以有路径地址)