node.js学习记录

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脚本中参数的值

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值