介绍
- npm(node package manage)node 包 管理器。管理node包的工具
- npm这个工具,在安装 node 的时候,就已经安装到你的计算机中了
- 命令行中执行:
npm -v
,如果看到版本号,说明安装成功了 - npm 是 管理(下载、卸载、发布….)第三方模块的工具
初始化
安装本地模块,需要使用npm工具初始化
- 执行
npm init
- package name :输入包名
- 注意事项
- 默认使用当前文件夹的名 作为 包名
- 包名不能使用中文,特殊字符(& _ …等)
- 不能和需要安装的第三方模块同名
- 注意事项
- 然后一路回车
- package name :输入包名
- 执行
npm init -y
-y
代表全部yes- 不需要修改任何条件时直接使用,马上初始化完毕
-
package.json 文件
dependencies 依赖(复数)
- dependencies指定了当前项目所依赖(需要)的包,可以使用
**npm install**
可以安装所有的依赖 - 使用
npm install 模块
安装模块时,会将该模块记录到 dependencies 中,表示这是项目必须的模块。 - 使用
npm install 模块 -D
安装模块时,会将该模块记录到 devDependencies 中,它表示项目不需要这个模块,但是开发阶段需要这个模块(进行测试、打包等等)
- dependencies指定了当前项目所依赖(需要)的包,可以使用
scripts
scripts
指定了运行脚本命令的 npm 命令行缩写,比如start指定了运行npm run start
时,所要执行的命令。npm run a
npm run start
npm start
- 只有 start 可以简化调用
本地模块
安装
建议在安装第三方模块之前,先执行如下命令
下面的命令只需要执行一次即可(不管以后重启vscode还是重启电脑,都不需要执行第二次)
提升下载速度,复制命令,cmd窗口中右击粘贴npm config set registry [https://registry.npm.taobao.org](https://registry.npm.taobao.org)
- 执行
npm install 包名
- 执行
npm i 包名
- i 是 install 的简写
- 执行
npm i 包名 包名
- 一次性下载多个
- 执行
npm i 模块@版本号
- 下载指定版本
- 安装项目依赖,老版本的node需要加
--save
,作用是把下载的记录到开发依赖中- 如:
npm i dayjs --save
===npm i dayjs -s
- 如:
只在开发阶段使用,项目做完不需要webpack了,这样的包可以安装到开发依赖中,做区分
执行
npm uninstall 包名
- 执行
npm un 包名
- un 是 uninstall 的简写
执行
npm un 包名 包名
下载安装的模块,存放在当前文件夹的
node_modules
文件夹中- 同时还会生成一个记录下载的文件
package-lock.json
- 下载的包都会记录在这里,删除后也会删除记录信息
使用时,会查找当前文件夹的
node_modules
,找不到会向上层文件夹查找,以此类推dayjs 和 moment 都是时间日期处理模块,功能相似
- dayjs 体积更小 网站:https://dayjs.fenxianglu.cn/ ```javascript // 导入模块 const dayjs = require(‘dayjs’)
// 得到当前的时间 console.log(dayjs().format())
// 获取具体时间格式向format传入格式参数 console.log(dayjs().format(‘YYYY-MM-DD HH:mm:ss’)) // 年月日时分秒格式
// 把任意的一个时间改变成年月日时分秒格式 console.log(dayjs(188513465148).format(‘YYYY-MM-DD HH:mm:ss’)) // 向dayjs()传入一个时间戳 ```
全局模块
全局模块和本地模块的差异
- 全局安装的模块,不能通过
require()
加载使用。 -
安装
执行
npm i 模块名 -g
- 执行
npm i -g 模块名
mac 系统如果安装不上,使用下面的命令提高权限
-
使用
执行
nrm ls
—- 查看全部可用的镜像源执行
nrm use 镜像源
运行
nrm ls
或者nrm use taobao
等命令,如果报错如下:
“无法加载文件 C:………………….,因为在此系统上禁止运行脚本。…………….”- 解决办法是:
管理员
方式,打开命令行(powershell)窗口- 执行
set-ExecutionPolicy RemoteSigned;
- 在出现的选项中,输入
A
,回车。即可。
- 如果报错如下
“无法将 nrm 识别为 cmdlet、函数、脚本文件或可运行程序的名称。xxxxxxxxxxx” - 解决办法,重启vscode,win7可能要重启电脑。
require运行机制
- 判断缓存中有没有,如果有,使用缓存中的内容
- 缓存中没有,那么表示第一次加载,加载完会缓存
- 判断模块名有没有带路径(./)
- 模块名中有路径,加载自定义模块(自己写的文件)
const xx = require('./xx')
- 优先加载同名文件,加载一个叫做 xx 的文件
- 再次加载js文件,加载 xx.js 文件
- 再次加载json文件,加载 xx.json 文件
- 如果上述文件都没有,则报错 “Cannot find module ‘./xx’”
- 模块名没有路径,优先加载核心模块,如果没有核心模块,则加载第三方模块
- 加载第三方模块的查找方式
- 优先在当前文件夹的node_modules里面查找第三方模块
- 在当前文件夹的上级目录的node_modules里面查找第三方模块
- 继续向上层文件夹查找第三方模块
- 找到根目录还没有找到会报错
开发一个包
文件
📂 - puxinman-test
📃 - package.json (package.json包的配置文件)
📃 - index.js (入口文件)
📃 - README.md (说明文档)
规范
一个规范的包结构,需要符合以下 3 点要求:
- 包必须以单独的目录而存在
- 包的顶级目录下要必须包含 package.json 这个包管理配置文件
- package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口。
- name 包的名字,我们使用 require()加载模块的时候,使用的就是这个名字
- version 版本,1.2.18
- main 入口文件。默认是index.js 。如果不是,需要使用main指定
- description 搜索时的文字说明
- 关于更多的约束,可以参考如下网址: https://yarnpkg.com/zh-Hans/docs/package-json
发布包