1.什么是Node.js
(1)概念
官网解释:Node.js是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境。
简单来说:node.js就是前端的后端,可以当Web 服务器,但更倾向处理业务逻辑。
具体的说:
Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js 是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
(2)特性
Node.js可以解析JS代码(没有浏览器安全级别的限制,可以跨域请求)提供很多系统界别的API。
文件的读写(fs)
进程的管理(process)
网络通信(http/https)
…
另:
① 不能跨域浏览器报的错:
node.js的回调函数有一个特点:错误优先回调,也就是第一个参数是err,第二个参数才是数据data
② 使用node命令可以直接执行js文件,原来如果要执行js文件必须要依赖浏览器,即将js文件引入html文件,再去浏览器上访问html页面js才被执行。而现在有了node给js提供运行环境只需要在命令终端输入:node js文件命令即可执行该js文件。
2.Node相关工具
(1)NVM(node version management )
nvm:是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。下面列出下载、安装及使用方法。
Mac安装
https://github.com/nvm-sh/nvm/blob/master/README.md
Windows安装
nvm-windows
nodist
安装/管理nodejs
查看本地安装的所有版本,有可选参数available,显示所有可下载的版本:
nvm list [available]
安装,命令中的版本号可自定义,具体参考命令1查询出来的列表:
nvm install 11.13.0
使用特定版本:(只针对于当前终端生效)
nvm use 11.13.0
修改默认版本:(对于所有终端生效 )
nvm alias default 11.13.0
卸载:
nvm uninstall 11.13.0
命令提示
nvm arch :显示node是运行在32位还是64位。
nvm install [arch] :安装node, version是特定版本也可以是最新稳定版本latest。可选参数arch指定安装32位还是64位版本,默认是系统位数。可以添加–insecure绕过远程服务器的SSL。
nvm list [available] :显示已安装的列表。可选参数available,显示可安装的所有版本。list可简化为ls。
nvm on :开启node.js版本管理。
nvm off :关闭node.js版本管理。
nvm proxy [url] :设置下载代理。不加可选参数url,显示当前代理。将url设置为none则移除代理。
nvm node_mirror [url] :设置node镜像。默认是https://nodejs.org/dist/。如果不写url,则使用默认url。设置后可至安装目录settings.txt文件查看,也可直接在该文件操作。
nvm npm_mirror [url] :设置npm镜像。https://github.com/npm/cli/archive/。如果不写url,则使用默认url。设置后可至安装目录settings.txt文件查看,也可直接在该文件操作。
nvm uninstall :卸载指定版本node。
nvm use [version] [arch] :使用制定版本node。可指定32/64位。
nvm root [path] :设置存储不同版本node的目录。如果未设置,默认使用当前目录。
nvm version :显示nvm版本。version可简化为v。
(2)NPM(node package management )
1–全局安装/卸载依赖包
npm install/uninstall packageName -g
全局依赖包的目录
Mac:/Users/用户名/.nvm/versions/node/nvm各个版本/bin/
Windows: C:\users\用户名\AppData\Romaing\npm\node_modules
2–本地(局部)安装依赖包
npm install packageName --save[-dev] //-dev是安装开发时依赖才会加上
简写:
npm install packageName -S //生产时依赖
npm install packageName -D //开发时依赖
非常常用的第三方工具包lodash、underscore
项目中的package.json是对项目或者模块包的描述,里面包含许多元信息。
npm init [-y] //生成package.json文件,-y的意思就是一切都yes。
3–查看项目中已安装的包
npm list 查看项目中所有包名称和版本号,以及包与包之间的层级关系
npm list | grep pkgName 查看指定包的版本号,以及和该包相关层级关系
npm view pkgName versions 查询指定package包的所有版本
npm info pkgName 查询指定依赖包的详细信息
pkgName -v 查询指定包的版本号
4–更新项目中已安装的包
npm outdated 查看项目中哪些包是已经过期需要升级的
npm update 更新项目中版本对应的依赖包,多用于手动修改了package.json里中依赖包的版本号。(4和5搭配使用)
5–关于版本号
例:^13.4.6/~13.4.6 /13.4.6 /*
---- major(主版本号):13,minor(次版本号):4,patch(补丁号):6
注:patch,如果是偶数一般是指稳定的,如果是奇数表示不稳定的
---- ^ 符号表示对版本进行适配,只锁定主板号,也就是主板号不变,其他进行适配
---- ~ 表示锁定主版本号和次版本号,patch适配
---- 版本号前面为空表示锁定主版本号、次版本号、补丁号
---- * 符号表示包的最新版本
6–清除缓存
npm cache clean --force
7–npm脚本
什么是npm脚本?
npm允许在packsge.json文件中,使用scripts字段定义脚本命令。通过npm run key执行
执行顺序
如果npm脚本里需要执行多个任务,那么需要明确它们的执行顺序。
① & 符号表示并行执行,执行顺序不确定,按照哪个文件先执行完的来排序
② && 符号表示串行执行,按照从做左到右的顺序执行文件(先执行script1.js在执行script2.js文件)
简写脚本:start、test
scripts脚本中有几个特殊的简写脚本:start、test。在命令终端中执行这两个脚本时不需要写run,直接输入npm start/test即可运行npm脚本.
访问package.json中的配置变量,前缀npm_package_
①在package.json 文件内访问
Windows使用%%,mac使用$,前缀npm_package_访问的变量名[_key]。
windows:
mac:
运行结果:
②外部文件访问package.json中的配置变量
script.js:
运行结果:
(3)NRM(npm registry manager )
1–手动切换源
查看当前源:
npm config get registry
切换淘宝源:
npm config set registry https://registry.npm.taobao.org
2–NRM管理源
NRM是npm的镜像管理源工具,有时候国外资源太慢,使用这个就可以快速地在npm源间切换。
安装NRM
需全局安装
npm i -g nrm
使用NRM
终端输入:
nrm ls //查看可选的源。其中,带*的是当前使用的源。
切换NRM
切换taobao源:
nrm use taobao
切换npm源:
nrm use npm
…
测试速度
nrm test //测试相应源的响应时间
3–设置代理
npm config set proxy 代理地址:端口
npm config set https-proxy 代理地址:端口
(4)NPX(npm package extention)
npm从5.2版开始,增加了npx命令。Node自带npm模块,所以可以直接调用npx命令。如果不行则手动安装:
npm install -g npx
NPX的作用: 为了调用项目内部安装的模块,例:
如果项内部安装了webpack,目前为止通过命令的方式获取版本号有两种
①终端直接输入:
node-modules/.bin/webpack --version
②编写package.json中的scripts脚本
再执行脚本:
npm run wbpkVer
以上两种用起来都比较麻烦,npx就是为了解决这个问题,所有有了第三种方式:
③终端直接输入:
npx webpack --version
原理:项目运行的时候,会到node-modules/.bin 路径下和环境变量$PATH里面检查命令是否存在
使用时的两种情况
①如果项目本地有访问的依赖包,则直接访问,例:
项目中有webpack包则执行npx webpack -v,结果会显示webpack的版本号
②如果项目本地没有访问的依赖包,则执行npx命令时,会自动安装该依赖包,并且安装的包是一次性使用的,存在临时文件夹中,用完一次就会删掉这个包,并不会存在package.json和node-modules文件中。例:
项目中没有安装gulp包,执行npx命令就会去自动安装gulp包。
两参数的使用
①–no-install:让npx强制使用项目本地安装模块(依赖包),不下载远程模块(依赖包) 。如果本地不存在该依赖包,就会报错。例:
npx --no-install webpack
②–ignore-existing:与之相反,如果本地有同名的模块,强制安装使用远程的模块,这样可以是该模块使用的是最新版本。
npx --ignore-existing weboack
3.Node的三类模块
node.js中有三类模块:内置模块,第三方模块,自定义模块
(1)内置模块
访问https://nodejs.org/docs/latest-v主版本号.x/api/,比如:path、http、https、process等等都是Node的内置模块中的,直接引入调用即可。
(2)第三方模块
- 访问https://www.npmjs.com/
- 按需安装第三方包 npm install pkgName
- 将安装好的第三方包引入即可使用
(3)自定义模块 – 使用CommonJS规范
1–发布包
生成pakeage.json文件:
npm init -y
name---------包名,包名是全网唯一的
version-------包版本号
main-----------该包的主入口,也是暴露给外面使用的接口
创建index.js并写入要实现的功能方法,并导出(使用CommonJS规范)
注册npm仓库账号
网站:https://www.npmjs.com/,登录已有账号邮箱
打开命令终端输入:
npm adduser
然后输入npm的账号密码邮箱
如果npm使用了淘宝镜像https://registry.npm.taobao.org/,则需要npm切换源
npm config get registry //查看当前源
npm config set https://registry.npmjs.org //切换源
nrm use npm //也可切换源,二选一
再次输入登录
npm adduser
发布(上传)包:
npm publish
如果是有命名空间的包用:
npm publish --access public(发布为公用包)
或者 也可通过 package.json 中的 publicConfig 字段配置声明。
{
"name": "test-npm",
"version": "0.1.0",
"main": "lib/index.js",
"module": "es/index.js",
"publishConfig": {
"access": "public"
}
...
}
补:发布带有命名空间的包 npm 会默认为是要发布私有包,发布私有包需要另外付费。
在所需要引入该包的项目安装
npm i custom-test
引入模块进可使用自定义的包
测试:
node server.js
注:如果该自定义的模块中有修改,则需修改package.json中的version的版本号(比如1.0.1),再重新npm publish即可。
如何删除npm包
npm unpublish <包名> -force
注:
1)npm unpublish 命令只能删除72小时内发布的包
2)npm unpublish 删除的包,在24小时内不能重新发布
3)发布包是慎重,尽量不要在npm上发布无意义的包
如何升级版本
① 版本号格式
格式:MAJOR.MINOR.PATCH ,值非负整数,且禁止在数字前面补 0
MAJOR:主版本号,MINOR:次版本号,PATCH::修订号
② 版本号递增逻辑
1)当有破坏性不兼容的 API 变更时,升级主版本号
2)当新增一些功能特性时,升级次版本号
3)当做一些 bug 修复时,升级修订号
当某个版本还不稳定的时候,还可能要先发布一个先行版本,具体可看 semver 规范。
可以使用 npm version 命令来修改版本号。
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]
例如:
# 0.0.0 => 0.0.1
npm version patch
# 0.0.0 => 0.1.0
npm version minor
# 0.0.0 => 1.0.0
npm version major
# 0.0.0 => 0.0.1-0
# === 先行版本 ===
npm version prepatch
# 0.0.0 => 0.0.1-alpha.0
npm version prepatch --preid=alpha
# 0.0.1-alpha.0 => 0.0.1-alpha.1
npm version prerelease
命令行选项
–preid 指定先行版本的标识符,例如 1.2.3-rc.4 中的 rc
-m 或 --message 可以指定 commit 信息,例如 npm version patch -m "Upgrade to %s for reasons” ;
-no-git-tag-version 取消创建 git tag 和 commit 信息
2–借助 cli 工具 release-it 来自动发布包
https://blog.csdn.net/BASK2312/article/details/128145705
其他说明
执行 npm version 命令时,会修改 package.json 、package-lock.json 的 version 字段为对应版本;若当前使用 git 来管理文件,还会创建一条 commit 信息和创建一个 tag,可通过指定 -no-git-tag-version 取消生成 commit 和 tag。
执行 npm version 前,git 工作区和暂存区确保没有文件,否则会执行失败。
4.cross-env使用
(1)cross-env是什么
运行跨平台设置和使用环境变量的脚本。
(2)出现原因
当使用NODE_ENV=production来设置环境变量时,大多数Windows命令提示将会阻塞(报错),(异常是windows上的Bash,它使用本机Bash)换言之,Windows不支持NODE_ENV=production 的设置方式。
(3)解决
用cross-env可以实现使用单个命令,而不必担心平台正确设置或使用环境变量,这个包能够提供一个设置环境变量的scripts,通过Unix的方式设置环境变量,然后再Windows上也能兼容运行。
(4)安装
npm i --save-dev cross-env
(5)使用
例子:目的是为了在执行npm脚本时能获取脚本中设置的参数的值
mac操作系统:
package.json
①scripts脚本中有一个NODE_ENV参数变量,不同的脚本NODE_ENV设置值不同
②分别在webpack.prod.config.js和webpack.dev.config.js 中获取NODE_ENV参数的值
③终端分别执行脚本
执行npm run build -----------------------打印结果:production
执行npm run dev--------------------------打印结果:development
windows操作系统:
在windows上操作,运行npm脚本会报错,这里就需用到cross-env,使在Windows上也可以兼容运行
为确保在任何操作系统上都能兼容运行,取到参数的值,都加上cross-env来获取 npm脚本中参数的值