Node npm包管理器介绍
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
- 指定版本:比如
- dependencies指定了当前项目所依赖(需要)的包,使用
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的加载机制
判断缓存中有没有,如果有,使用缓存中的内容
缓存中没有,那么表示第一次加载,加载完会缓存
判断模块名有没有带路径(./)
模块名中有路径,加载自定义模块(自己写的文件)
const xx = require('./xx')
- 优先加载同名文件,加载一个叫做 xx 的文件
- 再次加载js文件,加载 xx.js 文件
- 再次加载json文件,加载 xx.json 文件
- 最后加载node文件,加载 xx.node文件
- 如果上述文件都没有,则报错 “Cannot find module ‘./xx’”
模块名没有路径,优先加载核心模块,如果没有核心模块,则加载第三方模块
加载第三方模块的查找方式
- 优先在当前文件夹的node_modules里面查找第三方模块
- 在当前文件夹的上级目录的node_modules里面查找第三方模块
- 继续向上层文件夹查找第三方模块
全局模块
和本地模块的差异
- 全局安装的模块,不能通过
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包管理器介绍相关推荐
- Node.js包管理器Yarn的入门介绍与安装
FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在前不久, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm . ...
- NPM js 包管理器介绍
NPM的定义 npm 全称 Node Package Manager , 是Node.js 默认的, 以javascript 编写的软件包管理系统 用于分享和使用代码,早已成为前端的标配. 作用类似与 ...
- npm 包管理器_导演电影解释了节点软件包管理器(NPM)
npm 包管理器 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) If you understand the general way that Hollywoo ...
- npm 包管理器_纱包管理器:npm的改进
npm 包管理器 From bower to npm, package management for the web has come a long way. 从Bower到npm ,Web的软件包管 ...
- node.js包管理器和代码调式
一.如何使用包管理器 Node.js包管理器,即npm是Node.js官方提供的包管理工具,它已经成了Node.js包的标准发布平台,用于Node.js包的发布.传播.依赖控制. (1)获取一个包 n ...
- NPM包管理器跟换国内镜像CNPM
NPM包管理器跟换国内镜像 CNPM npm 是node.js 环境下的包管理器,非常强大智能. 生活这这片神奇的土地上,各种奇葩手段屡见不鲜啊. 为什么要换源? npm 官方站点 http://ww ...
- ❤️《大前端—NPM包管理器》
<大前端-NPM包管理器> 1.简介 官方网站:https://www.npmjs.com/ NPM全称Node Package Manager,是Node.js包管理工具,是全球 ...
- VSCode中npm包管理器安装到卸载
学习视频: https://www.bilibili.com/video/BV1BU4y147pS?p=21&spm_id_from=pageDriver npm包管理器安装到卸载 npm包管 ...
- node.js 安装及配置(hello world)及 node 的包管理器(npm)
下载地址:Download | Node.js,无脑下一步安装即可: 安装时,会自动将 node 可执行文件路径添加进 Path 内,这样进入 cmd 命令行,以查看 node 的安装版本: > ...
最新文章
- 重磅解读 | 赵义博:量子密码的绝对安全只存在于理论
- Settype COM_TA_MANUFAC - mapping between ERP Equipment and CRM Individual Object
- 树状数组萌新讲解+基础习题【一点一滴】
- 如何在恢复模式下重新启动Mac?
- 深入剖析 Sharepoint 企业项目管理与 SharePoint(转)
- 入门大数据基础知识了解
- VS2012安装部署教程
- 和丰钢结构企业erp管理软件
- 三星真机云测平台可能是最好的云测平台,因为他免费。
- “熊猫烧香”制造者的起伏人生
- 【架构干货】京东是如何抗住今年春晚百亿次互动的?
- python 图片数据集批量打标签
- 从Eclipse官网查找自己要的插件地址 来安装
- 公司 邮件 翻译 培训 长难句 13
- 我做的一个Android 下的PDF书架阅读APP
- Docker Daemon
- 海绵宝宝python代码_python的初体验
- 21 _ 服务调用失败时有哪些处理手段?
- 3年300万台,小米智能门锁交出首份答卷
- 深入解析美团外卖Flutter-架构演进之路(上篇),2021Android研发必问高级面试题
热门文章