Node.js学习笔记
NodeJS
Node.js 是一个基于 Chrome V8 的 JavaScript 引擎。
官网:nodejs.org
中文网: nodejs.cn
发展历史
2008年,Google 公司发布 Chrome 浏览器(V8 编译器)。
2009年,Node.js 项目诞生。它标志着 JavaScript 可以用于服务器端编程,从此网站的前端和后端可以使用同一种语言开发。
2010年,npm 项目诞生。标志着 JavaScript 进入模块化开发的时代。
2012 年,webpack 项目开源。
下载安装
官网下载tar.gz 包
# 解压
tar -xvf node-v16.20.1-linux-x64.tar.xz
# 添加链接
ln -s /opt/node/node-v16.20.1/bin/node /usr/local/bin/node
ln -s /opt/node/node-v16.20.1/bin/npm /usr/local/bin/npm
# 测试
node -v
npm
npm 是Node.js 的包管理工具,安装Node 时会自动安装npm 工具,可以使用 npm -v
验证是否安装成功。
npm中文网 : www.npmjs.cn
当前 npm 的稳定版本为 8.3.0 【时间:2022-01】
配置
# 查看npm所有配置项
npm config ls
镜像源
# 查看镜像源仓库地址
npm get registry
# 设置镜像源仓库为 国内的npm镜像源
npm config set registry https://registry.npmmirror.com
淘宝NPM 镜像站:Registry Endpoint:https://registry.npmmirror.com。Web 站点:https://npmmirror.com,
http://npm.taobao.org 和 http://registry.npm.taobao.org 将在 2022.06.30 号正式下线和停止 DNS 解析。
官方镜像源地址 http://www.npmjs.org,网速慢。
npmrc 配置文件
全局配置文件:/etc/npmrc
用户配置文件:~/.npmrc
项目配置文件:$项目根目录/.npmrc
通过 npm config 修改的是用户配置文件~/.npmrc
文件内容:
cache=D:\NodeJs\node_cache # 定义缓存目录
prefix=D:\NodeJs # 配置bin目录
# 设置仓库
registry=https://nvwa.jiuqi.com.cn/nexus/repository/npm-gov-group/
# 根据scope设置仓库
@ynwm:registry=http://registry.npm.beecode.cn/
@nr:registry=http://nvwa.jiuqi.com.cn/nexus/repository/npm-nvware-group/
安装软件包
npm
有两种安装软件包的方式:
- 本地安装
- 全局安装 (-g)
package.json
使用npm 局部安装软件包之前必须在当前目录下有package.json
文件,可以使用 npm init
命令创建:
# 在当前目录下生成 package.json(参数需要逐个手动指定)
npm init
# 在当前目录下自动生成 package.json
npm init -y
生成后的 package.json 内容如下:
{
"name": "my_practice",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"view-design": "^4.7.0",
"vue": "^2.6.14"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
官方文档说明: https://docs.npmjs.com/cli/v8/configuring-npm/package-json
参数说明:
dependencies:生产环境所需要的依赖
devDependencies:开发环境所需要的依赖
npm install xxx --save # 通过--save 或 -S 的方式来保存到dependencies中
npm install xxx --save-dev # 通过--save-dev 或 -D的方式来保存到devdependencies中
执行 npm install
命令后,会读取当前目录下的 package.json 文件,最终下载的软件包存放在当前目录下的node_modules
文件夹下。
在使用npm install的时候会自动生成一个package-lock.json的文件,package-lock.json文件则会记录每个模块的详细信息,如模块的具体版本号和各个模块所依赖的子模块的信息。
package.json
package-lock.json
npm install
是将package.json下面的所有依赖报全部进行安装,而 npm install --production
则只是安装dependencies下的依赖而不安装devDependencies下的。
npm install
# 安装软件包(全局)
npm install -g <package>
# 安装软件包(局部)
npm i <package>
# 安装软件包(局部,指定版本)
npm i <package>@<version>
# 卸载包
npm uninstall <package>
# 更新包
npm update <package>
# 查看已安装的包
npm list -g --depth 0
# 列出指定软件包所有可用的版本
npm view <package> versions
# 清除npm缓存
npm cache clean -f
注:安装软件包时,使用 @
符号指定版本下载,如 npm install vue@2.6.14
;
版本号
npm 软件包的版本号遵循语义化版本 semver ,所有的版本都有 3 个数字,版本格式:
主版本号.次版本号.修订号
,版本号递增规则如下:
- 主版本号:当你做了不兼容的 API 修改,
- 次版本号:当你做了向下兼容的功能性新增,
- 修订号:当你做了向下兼容的问题修正。
无符号: 仅接受指定的特定版本。
latest
: 使用可用的最新版本。~
: 如果写入的是〜0.13.0
,则只更新补丁版本:即0.13.1
可以,但0.14.0
不可以。^
: 如果写入的是^0.13.0
,则要更新补丁版本和次版本:即0.13.1
、0.14.0
、依此类推。*
: 如果写入的是*
,则表示接受所有的更新,包括主版本升级。>
: 接受高于指定版本的任何版本。>=
: 接受等于或高于指定版本的任何版本。<=
: 接受等于或低于指定版本的任何版本。<
: 接受低于指定版本的任何版本。
package-lock.json
官方文档说明:https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json
package-lock.json
被设计用于多种目的,其中最重要的一个目的是确保每次安装都能生成唯一的软件包依赖树,因为在一个项目的团队开发中,我们希望每个开发人员安装的软件包版本都是一致的。
npm run
npm run
是 Node.js 包管理工具 npm
提供的一个核心命令,用于执行项目 package.json
文件中定义的自定义脚本(scripts)。它的核心作用是简化开发流程中常用命令的执行,让开发者无需手动输入复杂的命令行指令。
核心功能
- 统一管理脚本
将项目中常用的命令(如启动服务、运行测试、构建代码等)集中在package.json
的scripts
字段中,便于维护和团队协作。 - 跨平台兼容
自动处理不同操作系统(Windows/macOS/Linux)的路径、换行符等问题,确保脚本可移植性。 - 依赖隔离
脚本执行时会自动加载项目的本地依赖(通过node_modules/.bin
路径),无需全局安装工具。
npm script
Node 开发离不开 npm,而脚本功能是 npm 最强大、最常用的功能之一。
npm 允许在package.json
文件里面,使用scripts
字段定义脚本命令。
{
// ...
"scripts": {
"build": "node build.js"
}
}
上面代码是package.json
文件的一个片段,里面的scripts
字段是一个对象。它的每一个属性,对应一段脚本。比如,build
命令对应的脚本是node build.js
。
命令行下使用npm run
命令,就可以执行这段脚本。
$ npm run build
# 等同于执行
$ node build.js
原理
npm 脚本的原理非常简单。每当执行npm run
,就会自动新建一个 Shell,在这个 Shell 里面执行指定的脚本命令。因此,只要是 Shell(一般是 Bash)可以运行的命令,就可以写在 npm 脚本里面。
比较特别的是,npm run
新建的这个 Shell,会将当前目录的node_modules/.bin
子目录加入PATH
变量,执行结束后,再将PATH
变量恢复原样。
这意味着,当前目录的node_modules/.bin
子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径。比如,当前项目的依赖里面有 Mocha,只要直接写mocha test
就可以了。
"test": "mocha test"
//而不用写成下面这样
"test": "./node_modules/.bin/mocha test"
由于 npm 脚本的唯一要求就是可以在 Shell 执行,因此它不一定是 Node 脚本,任何可执行文件都可以写在里面。
npm 脚本的退出码,也遵守 Shell 脚本规则。如果退出码不是0
,npm 就认为这个脚本执行失败。
npx
npm 从5.2版开始,增加了 npx 命令。它有很多用处,本文介绍该命令的主要使用场景。
Node 自带 npm 模块,所以可以直接使用 npx 命令。万一不能用,就要手动安装一下。
$ npm install -g npx
调用项目安装的模块
npx 想要解决的主要问题,就是调用项目内部安装的模块。比如,项目内部安装了测试工具 Mocha。
$ npm install -D mocha
一般来说,调用 Mocha ,只能在项目脚本和 package.json 的scripts
字段里面, 如果想在命令行下调用,必须像下面这样。
# 项目的根目录下执行 $ node-modules/.bin/mocha --version
npx 就是想解决这个问题,让项目内部安装的模块用起来更方便,只要像下面这样调用就行了。
$ npx mocha --version
npx 的原理很简单,就是运行的时候,会到node_modules/.bin
路径和环境变量$PATH
里面,检查命令是否存在。
由于 npx 会检查环境变量$PATH
,所以系统命令也可以调用。
# 等同于 ls $ npx ls
注意,Bash 内置的命令不在$PATH
里面,所以不能用。比如,cd
是 Bash 命令,因此就不能用npx cd
。
注意,只要 npx 后面的模块无法在本地发现,就会下载同名模块。比如,本地没有安装http-server
模块,下面的命令会自动下载该模块,在当前目录启动一个 Web 服务。
$ npx http-server
如果想让 npx 强制使用本地模块,不下载远程模块,可以使用--no-install
参数。如果本地不存在该模块,就会报错。
$ npx --no-install http-server
pnpm
pnpm - 速度快、节省磁盘空间的软件包管理器
yarn
yarn 与 npm 区别
- yarn安装速度快,因为它是异步执行安装依赖;npm是同步执行,它需要先安装好前面的包再接着安装。
- yarn安装过程信息很干净,npm会罗列很多其它包的信息,看过去感觉不直观。
- yarn安装后是有个yarn.lock文件,这个文件是会锁定你安装的版本,别人安装时会直接读取yarn.lock文件,这样可以保证安装的依赖的版本是一样的,npm在5.x.x的版本也引入了这个机制,它的文件叫package-lock.json。
yarn 和 npm 命令比对:
描述 | yarn | npm |
---|---|---|
初始化package.json | yarn init (可以在后面添加-y 跳过询问的信息) |
npm init (可以在后面添加-y 跳过询问的信息) |
根据package.json安装依赖 | yarn install(可以省略install) | npm install(install可以缩写成i ) |
安装某个依赖(默认是在dependencies) | yarn add packageName –save(简写-S ,或者省略该参数) |
npm install packageName –save(简写-S ,或者省略该参数) |
安装某个依赖在devDependencies | yarn add packageName –dev(可以简写成-D ) |
npm install packageName –save-dev(可以简写成-D ) |
全局安装依赖 | yarn global add packageName | npm install packageName -g |
移除依赖 | yarn remove packageName | npm uninstall packageName |
移除全局依赖 | yarn global remove packageName | npm uninstall packageName -g |
升级依赖 | yarn upgrade packageName(如果是全局的依赖则在yarn后面加上global ) |
npm update packageName(如果是全局的依赖则在后面加上-g ) |
清理不需要的依赖文件 | yarn clean | |
查看依赖包信息 | yarn info packageName | npm info packageName |
查看所有配置 | yarn config list | npm config list 或者 npm config ls -l |
查看某个配置的信息 | yarn config get configName | npm config get configName |
设置淘宝源 | yarn config set registry https://registry.npm.taobao.org |
npm config set registry https://registry.npm.taobao.org |
查看当前源 | yarn config get registry | npm config get registry |
罗列全局依赖 | yarn global list –depth=0 | npm list -g –depth 0 |
查看全局依赖目录 | yarn global bin 或者yarn global dir | npm prefix -g |
查看全局缓存的目录 | yarn cache dir | npm config get cache |
列出缓存包 | yarn cache ls | |
清除缓存 | yarn cache clean |
配置
yarn config set cache-folder "D:\yarn\cache"
yarn config set global-folder "D:\yarn\global"
nvm
nvm 是一种流行的运行 Node.js 的方式。 例如,它可以轻松地切换 Node.js 版本。
nvm -v #查看nvm版本
nvm list-remote #要列出所有可用的Node.js版本,请运行以下命令。
nvm install v14.15.4 #安装指定版本:如果你想安装Node.js v14.15.4版本,运行以下命令。
nvm list # 显示已安装的版本
nvm use version #切换指定版本
nvm uninstall node-version #如果你想卸载特定的Node.js版本,运行以下命令。
下载安装
# 首先,使用以下命令安装curl命令行工具:
dnf install curl -y
# 接下来,使用以下命令下载并运行NVM安装脚本:
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
# 接下来,使用以下命令为NVM激活环境变量:
source ~/.bash_profile
# 接下来,使用以下命令验证NVM的安装版本:
nvm --version
构建打包
vite
webpack
webpack 是JavaScript应用的模块打包工具,于2012 年3月开源。
注:webpack 依赖于 Node 环境,Webpack 5 运行于 Node.js v10.13.0+ 的版本
npm install webpack@5.65.0
目录结构
webpack-demo
|- package.json
|- webpack.config.js
|- /dist
|- /src
|- index.js
|- /node_modules
dist 文件夹是webpack 打包出来的文件
src 源码
配置文件
在 webpack 4 中,可以无须任何配置使用,然而大多数项目会需要复杂的设置,这就是为什么 webpack 仍然要支持配置文件。这比在终端(terminal)中手动输入大量命令要高效的多。
webpack 的配置文件是 js文件,
webpack.config.js
模块热替换
esbuild
esbuild 一个极快的打包器
esbuild官方描述的作用就是:一个JavaScript的打包和和压缩工具。
esbuild使用golang开发,在打包的速度上非常快,我们熟悉的 vite工具在dev模式下就是使用esbuild进行打包。
README
作者:银法王
版权声明:本文遵循知识共享许可协议3.0(CC 协议): 署名-非商业性使用-相同方式共享 (by-nc-sa)
参考:
package.json 配置完全解读【字节跳动技术团队】
修改记录:
2022-01-01 第一次修订
2024-07-01 添加vite、npmx 等相关内容