Nodejs、yarn、npm关系辨析
@AikenH 2022 Node-JS-Chapter1
Concept 概念
对 Node,NPM,JS,Yarn,NVM 的概念和作用进行一个辨析和介绍,了解各自的含义和职责,进而理解我们使用的到底是什么,环境怎么管理,怎么自定义和进行改动等。
JS在1995年诞生,Nodejs在2009年诞生,在此之前JS只能在浏览器中使用(google开发的chrome的V8引擎),NodeJS(第三方作者想直接在计算机运行JS,让其脱离浏览器)相当于提供的一个JS的运行环境,用来支持JS的执行,也就是JS的一个runtime system。
由此,JS除了web前端编程,又可以支持后台开发、GUI开发、APP开发和CLI工具开发
Nodejs和JS的概念已经在上述清楚了,这里说一下nodejs组成:
- V8引擎将JS编译成机器码,提高运行速度;
- 本地模块:使用C/C++实现的一些高性能开源库;
- 标准库:封装C/C++的一些本地模块的接口,转换为JS接口,就是Nodejs的标准库,其良好的设计也赋予Nodejs强大的生命力;
NPM是随NodeJS一起安装的包管理工具(提供下载,版本校验,兼容性校验等功能),就像 pip、conda帮助Nodejs管理并解决本地部署的问题。
- 允许下载别人写好的第三方包到本地使用;
- 允许下载安装别人编写的命令行程序;
- 允许上传包或命令行程序给别人使用;
Yarn:由Facebook、Google、Exponent 和Tilde联合推出的JS包管理工具,和NPM就像是pip和conda的关系,其仍然使用NPM的registry,不过提供了全新的CLI来进行管理(也就是管理包的代码和逻辑有区别)
NVM:Conda的另一个功能,在同个电脑上管理多个Node版本;
CLI(Command-line-interface),相当于没有UI界面的命令行程序;
- Cnpm:为了解决国内链接Npm registry的困难,淘宝自己的npm镜像(不过现在没啥用了好像);
Runtime
什么是runtime:运行时(runtime)是什么意思、Runtime system - Wikipedia、Node.js是什么?运行时是什么
runtime主要有几种类型:
- 「程序运行的时候」,即程序生命周期的一个阶段。也就是运行阶段。
「运行时库」,支撑应用级语言(c,c++,Rust)的一些正常功能的lib,对部分“标准指令”进行包装,(标准库)优雅的映射到汇编。也就是程序运行的时候所需要依赖的库。
「运行时系统」某门语言的宿主环境:Node.js是一个JavaScript的运行时。运行时系统主要是一些高级语言的概念,可以理解成一个更大、更全的运行时库,低级语言由于强指定类型等原因,可直接直译成机器码,而依赖于编译的语言,就需要一个运行时系统来实现语言的运行。
JAVA运行时是JRE(Java Runtime Environment),C#运行时是CLR,他们都需要在OS上单独安装,借由他们来执行相应语言的程序(编译出的字节码),而对于JS来说,JS引擎不带IO支持的虚拟机,因此需要浏览器和Node这样的「JS运行时」才能让他控制文件、网络、图形等。
典型的高级语言的「运行时系统」需要如下的组件:
一个解释执行字节码的虚拟机,多半得带个垃圾回收器。
如果语言是源码解释执行,那么需要一个编译器前端做词法分析和语法分析。
如果运行时支持 JIT 优化,那么还得藏着个编译器后端(动态生成机器码)。
IO 相关能力,比如 Node.js 的
fs.readFile
之类。
已经相当于一个复杂的基础软件系统了。
总结:运行时就是,类似一些编好的dll、标准库、解释器等,支持JS运行的组件和工具的合集,被统称为运行时。
Nodejs & NPM
安装和配置
安装:windows 直接去 nodejs -> nodesource/distributions: NodeSource 官网下载安装。
1 |
|
更新npm版本
1 |
|
NPM设置代理registry地址,使用国内镜像
1 |
|
常用操作
1 |
|
node重新安装依赖包
1 |
|
npm 设置代理
1 |
|
Package.json
npm将每个使用npm的工程都看成一个包,包的信息是通过package.json
配置文件来描述的,可以手动创建,但是大多数时候是使用npm init
创建(可以创建一个看看默认值)
package-lock.json 锁定具体版本
npm在安装包的时候,会记录安装包时候准确的依赖项(包含版本信息),若我们保留了该文件,在安装的时候会根据上面的准确版本进行安装,最大程度的避免了差异。
package.json文件最重要的作用,是记录当前工程的依赖
- dependencies:生产环境的依赖包
- devDependencies:仅开发环境的依赖包
配置好依赖后,使用下面的命令即可安装依赖
- 本地安装所有依赖 安装所有依赖 dependencies + devDependencies
1 |
|
Install的时候添加参数,可将包添加到依赖项的package.json中
- 安装依赖到生产环境
1 |
|
- 安装依赖到开发环境
1 |
|
NPM中包的安装路径
节选自参考链接Link
- 本地安装
npm install
安装到当前路径的node_modules中 - 全局安装添加
-g
参数
全局文件的安装地址在: npm root -g
| npm config get prefix
YARN
YARN 相比NPM有以下的优点,但是npm6之后,npm和yarn非常接近,所以后续很多从yarn转回npm的
1 |
|
安装yarn
1 |
|
1 |
|
package管理
1 |
|
NVM
NVM用来管理node版本,便于适应多个node环境,在之间进行切换。
1 |
|
设置淘宝镜像
1 |
|
Nodejs、yarn、npm关系辨析