Node.js
NPM介绍:
-
npm(node package manage)node包管理器。管理node包的工具。
-
包:模块(包约等于模块,一个包可以包括一个或多个模块)
-
npm在安装node的时候,就已经安装到计算机中
-
命令行工具:
npm -v
,如果看到版本号,说明已经安装成功
npm是管理(下载、卸载、发布)第三方模块的工具
第三方模块:
npm作用:
npm的作用是:管理node模块的工具
npm就是一个管理(下载安装、卸载…)第三方模块的工具
本地模块
初始化
安装本地模块,使用npm工具初始化
npm init -y
# 或
npm init
# 然后一路回车
初始化之后,会在项目目录中生成 package.json 的文件
注意事项:
- package name 默认使用当前文件夹 当作 包的名字
- package name 不能有中文
- package name 不能有特殊符号
- package name 不能和需要安装的第三方模块同名
安装卸载第三方模块的命令
初始化之后,就可以在当前文件夹安装第三方模块了
建议在安装第三方模块之前,先执行如下命令...
下面的命令只需要执行一次即可(不管以后重启VsCode还是重启电脑,都不需要执行第二次)
npm config set registry https://registry.npm.taobao.org
下载安装第三方模块
# 正常的下载安装
npm install 模块名
# 简写 install 为 i
npm i 模块名
# 一次性安装多个模块
npm i 模块名 模块名 模块名
# 下载开发依赖
npm install -D 模块名
# 或
npm install --save-d 模块名
# 下载全局 - 下载全局性质的包,比如vue-cli(创建Vue项目的脚手架工具),nrm(切换下载源)
npm install -g 包名
# 查看全局下载的包
npm ls -g --depth 0
# 根据package.json 文件 dependencies和devDependencies字段自动下载对应的包
# 在接触一个新项目的时候,都需要使用这个安装依赖
npm install
# !!!所有的 install 都可以替换为 i 简写!!!
卸载模块
# 删除指定的第三方包
npm uninstall 模块名
# 简化写法
npm un 模块名
# 删除多个包
npm un 模块名 模块名 模块名...
# 删除全局包
npm un -g 模块名
上课演示的是 jquery、mysql、moment、cors、express、echarts
使用第三方包
// 1.任何包第一步都需要引入,require是直接写包名
const pkg = require('包名');
// 2.参考文档使用包
// 2.1 去官方找,比较优秀的包都是有官网的,vue,react,angular,lodash
// 2.2 npm.js.com 搜索包,包主页会有文档
// 2.3 百度搜索
nrm的使用
# nrm 是用来切换下载镜像源的
# 查看所有源地址
nrm ls
# 切换源
nrm use 源名称
package.json 文件
在初始化之后,会生成一个package.json的文件
-
创建
package.json
npm init npm init -y
-
main
main字段指定了模块的入口文件
-
dependencies 依赖 ( 复数 )
- dependencies 指定了当前项目所依赖 ( 需要 ) 的包,可以使用
npm install
可以安装所有的依赖 - 使用
npm install 模块
安装模块时,会将该模块记录到 dependencies 中,表示这是项目必须的模块 - 使用
npm install 模块 -D
安装模块时,会将该模块记录到 devDependencies 中,它表示项目不需要这个模块,但是开发阶段需要这个模块
- dependencies 指定了当前项目所依赖 ( 需要 ) 的包,可以使用
-
scripts
scripts
指定了运行脚本命令的 npm 命令行缩写,比如start指定了运行npm run start
时,所要执行的命令。- 下面的代码中,a 表示 git init 命令。执行命令时,使用
npm run a
,相当于执行了 git init - 下面的代码中,start 表示 node app.js 命令,执行命令时,使用
npm start
即可,相当于执行了 node app.js
- 下面的代码中,a 表示 git init 命令。执行命令时,使用
"script" :{
"a" : "git init",
"start" : "node app.js",
"t" : "dir c:\\"
}
运行 scripts
npm run t
npm run start
# 只有start 可以简化使用
npm start
require的加载机制
-
判断缓存中有没有,如果有,使用缓存中的内容
-
缓存中没有,那么表示第一次加载,加载完会缓存
-
判断模块名有没有带路径(./)
-
模块名中有路径,加载自定义模块(自己写的文件)
const xx = require('./xx')
- 优先加载同名文件,加载一个叫做 xx 的文件
- 再次加载js文件,加载 xx.js 文件
- 再次加载json文件,加载 xx.json 文件
- 最后加载node文件,加载 xx.node文件
- 如果上述文件都没有,则报错 “Cannot find module ‘./xx’”
-
模块名没有路径,优先加载核心模块,如果没有核心模块,则加载第三方模块
-
加载第三方模块的查找方式
- 优先在当前文件夹的node_modules里面查找第三方模块
- 在当前文件夹的上级目录的node_modules里面查找第三方模块
- 继续向上层文件夹查找第三方模块
- …
开发属于自己的包
规范的包结构
📂 - sy123
📃 - package.json (package.json包的配置文件)
📃 - index.js (入口文件)
📃 - README.md (说明文档)
-
name 项目名,不能有中文
-
version 项目版本号,里面只能是
数字.数字
-
main 项目的入口文件,指的是哪一个文件,默认是index.js,如果不是,需要使用main指定
-
scripts 声明简化命令:
{ "简化命令":"真实命令(命令行能用的名)", "start":"node ./index.js" } // 执行简化命令,在命令行中输入 npm run 简化命令 // start特殊,start可以 npm run start 也可以 npm start
-
dependencies 项目运行依赖(第三方包的信息,这里包含的包只要没有了,项目就无法运行)
-
devDependencies 开发依赖(开发中会用到,在项目运行时不会用,less,sass…)
初始化 package.json
注意:JSON文件不能有注释
{
"name": "sy123", // 包(模块)的名字,和文件夹同名。别人加载我们的包,找的就是这个文件夹
"version": "1.0.0",
"description": "This is a package by Laotang",
"main": "index.js", // 别人加载我们的模块用,require加载的就是这里指定的文件
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [ // 在npm网站中,通过关键字可以搜索到我们的模块,按情况设置
"laotang",
"itcast",
"test"
],
"author": "Laotang", // 作者
"license": "ISC" // 开源协议
}
index.js 中定义功能方法
// 别人加载的就是我的 index.js
// 所以,必须在 index.js 中导出内容
function a() {
console.log('aaa')
}
function b() {
console.log('bbb')
}
module.exports = { a, b } // 导出内容
编写包的说明文档
- 包根目录中的 README.md 文件,是包的使用说明文档。通过它,我们可以事先把包的使用说明,以 markdown 的 格式写出来,方便用户参考。
- README 文件中具体写什么内容,没有强制性的要求;只要能够清晰地把包的作用、用法、注意事项等描述清楚即可。
发布npm包
# 切换npm源
nrm use npm
# 登录npm
npm login
# 按照提示输入用户名、密码(按下键盘的时候不会有任何的显示,一直输入即可)、邮箱、OTP
# 发布
npm publish
更新npm包
# 在package.json中version,升级版本号
# 如果推送不上去,使用 npm login 重新登录一下
npm publish
删除自己发布的npm包
npm unpublish 包名 --force
# 删除包之后,24小时内不能再发布
第一次运行报错及解决
-
运行
nrm ls
或者nrm use taobao
等命令,如果报错如下:“无法加载文件 C:…,因为在此系统上禁止运行脚本。…”
-
解决办法是:
管理员
方式,打开命令行(powershell)窗口- 执行
set-ExecutionPolicy RemoteSigned;
- 在出现的选项中,输入
A
,回车。即可。
-
如果报错如下
“无法将 nrm 识别为 cmdlet、函数、脚本文件或可运行程序的名称。xxxxxxxxxxx”
-
解决办法,重启vscode,win7可能要重启电脑。