NPM(重点)

介绍

npm(node package manage)node 包 管理器。管理node包的工具。

包是什么?包就是模块。(包约等于模块,一个包可以包括一个或多个模块)

npm这个工具,在安装 node 的时候,就已经安装到你的计算机中了。

命令行中执行: npm -v ,如果看到版本号,说明安装成功了。

什么是第三方模块

非node自带的模块。也不是自定义的模块。

是别人写的模块,然后发布到npm网站,我们可以使用npm工具来下载安装别人写的模块。

第三方模块,都是在node核心模块的基础之上,封装了一下,实现了很多非常方便快速简洁的方法。

目前,npm网站收录了超过 150 万个第三方模块。

如果你想实现一个功能。那么请搜索第三方模块,没有做不到的事情,只有你搜不到。

npm的作用

npm的作用是:管理node模块的工具。

  • 下载并安装第三方的模块
  • 卸载第三方模块
  • 发布模块
  • 删除已发布的模块

npm 就是一个管理(下载安装、卸载…)第三方模块的工具

本地模块

初始化

安装本地模块,需要使用npm工具初始化。

npm init -y
# 或
npm init
# 然后一路回车

初始化之后,会在项目目录中生成 package.json 的文件。

安装卸载第三方模块的命令

初始化之后,就可以在当前文件夹中安装第三方模块了

建议在安装第三方模块之前,先执行如下命令。
下面的命令只需要执行一次即可(不管以后重启vscode还是重启电脑,都不需要执行第二次)
npm config set registry https://registry.npm.taobao.org

下载安装第三方模块

# 正常的下载安装
npm install 模块名# 简写install为i
npm i 模块名# 一次性安装多个模块
npm i 模块名 模块名 模块名

卸载模块

npm uninstall 模块名
npm un 模块名
npm un 模块名 模块名 模块名

上课演示的是 jquery、mysql、moment、cors、express、echarts

关于本地模块的说明

  • 下载安装的模块,存放在当前文件夹的 node_modules 文件夹中,同时还会生成一个记录下载的文件 package-lock.json
  • 下载的模块,在哪里可以使用
    • 在当前文件夹
    • 在当前文件夹的子文件夹
    • 在当前文件夹的子文件夹的子文件夹
    • 翻过来讲,当查找一个模块的时候,会在当前文件夹的 node_modules 文件夹查找,如果找不到,则去上层文件夹的node_modules文件夹中查找,…依次类推。

重要:代码文件夹不能有中文;代码文件夹不能和模块名同名。

怎样使用第三方模块

  • 和使用内置模块一样,需要使用 require 加载模块
  • 调用模块提供的方法完成工作
  • 不用担心不会用,好的第三方模块都会用使用文档或者官方网站的。
  • 有些模块没有官网,去 github 查找模块的使用文档,或者百度。

演示 moment 模块 的使用

http://momentjs.cn/

// moment是一个专门处理时间日期的模块// 使用模块之前,必须加载
const moment = require('moment');// 设置语言环境
moment.locale('zh-cn', {months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),weekdaysMin: '日_一_二_三_四_五_六'.split('_'),longDateFormat: {LT: 'HH:mm',LTS: 'HH:mm:ss',L: 'YYYY-MM-DD',LL: 'YYYY年MM月DD日',LLL: 'YYYY年MM月DD日Ah点mm分',LLLL: 'YYYY年MM月DD日ddddAh点mm分',l: 'YYYY-M-D',ll: 'YYYY年M月D日',lll: 'YYYY年M月D日 HH:mm',llll: 'YYYY年M月D日dddd HH:mm'},meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,meridiemHour: function (hour, meridiem) {if (hour === 12) {hour = 0;}if (meridiem === '凌晨' || meridiem === '早上' ||meridiem === '上午') {return hour;} else if (meridiem === '下午' || meridiem === '晚上') {return hour + 12;} else {// '中午'return hour >= 11 ? hour : hour + 12;}},meridiem: function (hour, minute, isLower) {const hm = hour * 100 + minute;if (hm < 600) {return '凌晨';} else if (hm < 900) {return '早上';} else if (hm < 1130) {return '上午';} else if (hm < 1230) {return '中午';} else if (hm < 1800) {return '下午';} else {return '晚上';}},calendar: {sameDay: '[今天]LT',nextDay: '[明天]LT',nextWeek: '[下]ddddLT',lastDay: '[昨天]LT',lastWeek: '[上]ddddLT',sameElse: 'L'},dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,ordinal: function (number, period) {switch (period) {case 'd':case 'D':case 'DDD':return number + '日';case 'M':return number + '月';case 'w':case 'W':return number + '周';default:return number;}},relativeTime: {future: '%s内',past: '%s前',s: '几秒',ss: '%d秒',m: '1分钟',mm: '%d分钟',h: '1小时',hh: '%d小时',d: '1天',dd: '%d天',M: '1个月',MM: '%d个月',y: '1年',yy: '%d年'},week: {// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效dow: 1, // Monday is the first day of the week.doy: 4  // The week that contains Jan 4th is the first week of the year.}
});// console.log(moment().format("YYYY-MM-DD HH:mm:ss"))
// console.log(moment().format("L"))// console.log(moment([2021, 0, 22, 09, 30, 25]).fromNow())
// console.log(moment(13432542333).fromNow())
console.log(moment('2020-11-10T15:49:05.000Z').fromNow())

演示jsonwentoken模块

jsonwebtoken模块的作用是生成token字符串。

https://github.com/auth0/node-jsonwebtoken

// 加载模块
const jwt = require('jsonwebtoken');// console.log(jwt.sign(必填, 必填, 可选, 可选));// Bearer 不属于token的内容,只是表示token的格式。// jwt.sign()
// 1. 参数1:对象,要在token保存的数据
// 2. 参数2:加密的字符串,类似于一个钥匙。随便填;后续解密token的时候,需要使用它
// 3. 参数3:对象,配置项,比如配置一下过期时间
// 4. 参数4:生成token后的回调函数// console.log('Bearer ' + jwt.sign(
//   { id: 1, username: 'zs' },
//   'shhhhh',
//   { expiresIn: '2h' },
//   // (err, abc) => console.log(abc)
// ));jwt.sign({ id: 1 }, 'sdfsdf', { expiresIn: '2h' }, (err, result) => {if (err) throw err;console.log('Bearer ' + result);
});

package.json文件

在初始化之后,会生成一个package.json文件

  • 创建 package.json

    npm init
    npm init -y
    
  • main

    main 字段指定了模块的入口文件。

  • dependencies 依赖(复数)

    • dependencies指定了当前项目所依赖(需要)的包,使用 npm install 可以安装所有的依赖
    • 软件的版本号 jQuery@3.3.1
      • 大版本.次要版本.小版本
      • 小版本:当项目在进行了局部修改或 bug 修正时,修正版本号加 1
      • 次要版本:当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1
      • 大版本:当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1
    • 版本号前的 ~^
      • 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
      • 波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
      • 插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x
  • scripts

    scripts指定了运行脚本命令的 npm 命令行缩写,比如start指定了运行npm run start时,所要执行的命令。

    "scripts": {"test": "echo \"Error: no test specified\" && exit 1","start": "node app.js","t": "dir c:\\"}
    

    运行 scripts

    npm run t
    npm run start
    # 只有 start 可以简化调用
    npm start

依赖的作用:

  • 记录项目必须的包
  • 发送给别人的时候,不需要发送比较大的 node_modules 文件夹。只需要发送给你 package.json 即可,你只需要执行 npm install 即可安装所有的包

require的加载机制

  1. 判断缓存中有没有,如果有,使用缓存中的内容

  2. 缓存中没有,那么表示第一次加载,加载完会缓存

  3. 判断模块名有没有带路径(./)

  4. 模块名中有路径,加载自定义模块(自己写的文件)const xx = require('./xx')

    1. 优先加载同名文件,加载一个叫做 xx 的文件
    2. 再次加载js文件,加载 xx.js 文件
    3. 再次加载json文件,加载 xx.json 文件
    4. 最后加载node文件,加载 xx.node文件
    5. 如果上述文件都没有,则报错 “Cannot find module ‘./xx’”
  5. 模块名没有路径优先加载核心模块如果没有核心模块,则加载第三方模块

  6. 加载第三方模块的查找方式

    1. 优先在当前文件夹的node_modules里面查找第三方模块
    2. 在当前文件夹的上级目录的node_modules里面查找第三方模块
    3. 继续向上层文件夹查找第三方模块

全局模块

和本地模块的差异

  • 全局安装的模块,不能通过 require() 加载使用。
  • 全局安装的模块,一般都是命令或者工具。

安装卸载命令

  • 安装命令(多一个 -g

    npm i 模块名 -g
    # 或
    npm i -g 模块名### mac 系统如果安装不上,使用下面的命令提高权限
    sudo npm i -g 模块名
    
  • 卸载命令(也是多一个 -g

    npm un 模块名 -g
    
  • 全局安装的模块,在系统盘(C盘)

    • 通过命令 npm root -g 可以查看全局安装路径

全局安装nodemon模块

  • 安装命令

    npm i nodemon -g
    
  • nodemon的作用:

    • 代替node命令,启动服务的工具
    • 当更改代码之后,nodemon会自动重启服务。
  • 运行nodemon,如果报错如下:

  • 解决办法是:

    • 管理员方式,打开命令行(powershell)窗口
    • 执行 set-ExecutionPolicy RemoteSigned;
    • 在出现的选项中,输入 A,回车。即可
  • 如果报错如下

  • 解决办法,重启vscode,win7可能要重启电脑。

  • 如果上述问题都解决了,还是不能用nodemon,联系老师;

全局安装nrm

nrm 是作用是切换镜像源。

全局安装

npm i -g nrm   (mac系统前面加 sudo)

使用nrm

nrm ls    --- 查看全部可用的镜像源
nrm use taobao  ---- 切换到淘宝镜像
nrm use npm  ---- 切换到npm主站

全局模块和本地模块的对比

本地模块,在安装之前,必须先初始化;全局安装的模块不需要初始化。

开发属于自己的包

规范的包结构

在清楚了包的概念、以及如何下载和使用包之后,接下来,我们深入了解一下包的内部结构。

												

Node npm包管理器介绍相关推荐

  1. Node.js包管理器Yarn的入门介绍与安装

    FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在前不久, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm . ...

  2. NPM js 包管理器介绍

    NPM的定义 npm 全称 Node Package Manager , 是Node.js 默认的, 以javascript 编写的软件包管理系统 用于分享和使用代码,早已成为前端的标配. 作用类似与 ...

  3. npm 包管理器_导演电影解释了节点软件包管理器(NPM)

    npm 包管理器 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) If you understand the general way that Hollywoo ...

  4. npm 包管理器_纱包管理器:npm的改进

    npm 包管理器 From bower to npm, package management for the web has come a long way. 从Bower到npm ,Web的软件包管 ...

  5. node.js包管理器和代码调式

    一.如何使用包管理器 Node.js包管理器,即npm是Node.js官方提供的包管理工具,它已经成了Node.js包的标准发布平台,用于Node.js包的发布.传播.依赖控制. (1)获取一个包 n ...

  6. NPM包管理器跟换国内镜像CNPM

    NPM包管理器跟换国内镜像 CNPM npm 是node.js 环境下的包管理器,非常强大智能. 生活这这片神奇的土地上,各种奇葩手段屡见不鲜啊. 为什么要换源? npm 官方站点 http://ww ...

  7. ❤️《大前端—NPM包管理器》

    <大前端-NPM包管理器> 1.简介 ​ 官方网站:https://www.npmjs.com/ ​ NPM全称Node Package Manager,是Node.js包管理工具,是全球 ...

  8. VSCode中npm包管理器安装到卸载

    学习视频: https://www.bilibili.com/video/BV1BU4y147pS?p=21&spm_id_from=pageDriver npm包管理器安装到卸载 npm包管 ...

  9. node.js 安装及配置(hello world)及 node 的包管理器(npm)

    下载地址:Download | Node.js,无脑下一步安装即可: 安装时,会自动将 node 可执行文件路径添加进 Path 内,这样进入 cmd 命令行,以查看 node 的安装版本: > ...

最新文章

  1. 重磅解读 | 赵义博:量子密码的绝对安全只存在于理论
  2. Settype COM_TA_MANUFAC - mapping between ERP Equipment and CRM Individual Object
  3. 树状数组萌新讲解+基础习题【一点一滴】
  4. 如何在恢复模式下重新启动Mac?
  5. 深入剖析 Sharepoint 企业项目管理与 SharePoint(转)
  6. 入门大数据基础知识了解
  7. VS2012安装部署教程
  8. 和丰钢结构企业erp管理软件
  9. 三星真机云测平台可能是最好的云测平台,因为他免费。
  10. “熊猫烧香”制造者的起伏人生
  11. 【架构干货】京东是如何抗住今年春晚百亿次互动的?
  12. python 图片数据集批量打标签
  13. 从Eclipse官网查找自己要的插件地址 来安装
  14. 公司 邮件 翻译 培训 长难句 13
  15. 我做的一个Android 下的PDF书架阅读APP
  16. Docker Daemon
  17. 海绵宝宝python代码_python的初体验
  18. 21 _ 服务调用失败时有哪些处理手段?
  19. 3年300万台,小米智能门锁交出首份答卷
  20. 深入解析美团外卖Flutter-架构演进之路(上篇),2021Android研发必问高级面试题

热门文章

  1. 软件项目管理期末复习--软件需求
  2. 三菱PLC各型号之间的区别
  3. 使用IDM解决FTP下载缓慢问题
  4. uni-app 拖动滑块验证(插件分享)
  5. linux下的微博客户端,几款第三方微博客户端的比较
  6. 解除计算机屏保密码设置密码,屏保密码怎么取消
  7. 大佬教你们如何快速复制网页中的链接地址(技巧分享,非爬虫篇)
  8. App Cleaner amp; Uninstaller Pro 破解教程
  9. CSS——过渡与动画
  10. 消息推送系统——(零)推倒萝莉之术