- LTS (长期支持版本 稳定,适用于生产)
- Current (尝鲜版本)
Node.js 版本比较多,但是众多版本中,通常奇数版本都是 Current 版本(v.5.x、v.9.x、v.11.x)偶数版本通常是 LTS 版本(v.6.x、v.8.x、v.10.x)
- 下载软件安装
- 使用 apt-get[ubuntu]、yum[centOS]、homebrew[macOS]等安装软件
这种方式安装,每次更新 Node.js 的版本,都需要从官网下载,并且进行覆盖安装。而且,在系统中只能存在一个版本的 Node.js ,不适合对比学习。
使用 3m 安装的原因:
- Node.js 版本更新过快,版本多,同台机子需要多个版本
- Node.js 内置的 npm 版本有差异
- 国内访问 npmjs.org 镜像的速度慢
用于开发阶段,解决多版本共存、切换、测试等问题的外部 shell 脚本。nvm 不支持 windows, window 使用 nvmw。
特点:
- 安装方便
- 可以随意切换需要安装的 Node.js 版本
- 还可以免除安装权限,通过 nvm 命令安装的 Node.js 位于用户目录下,而非系统目录下
- 在 npm 安装全局模块的时候,可以避免除操作系统超级用户授权问题。[常见 linux 系统的权限问题]
- 安装下载
# 需要git
# 版本哪里根据实际情况
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
# 通过 curl 下载执行 install.sh 脚本运行结果后见到控制台:
=> Appending nvm source string to /Users/mcdowell/.bash_profile
=> bash_completion source string already in /Users/mcdowell/.bash_profile
# 执行后 放在 /Users/mcdowell/.bash_profile路径下- 确认信息 先通过 cat 查看下确认信息,类似示例
xport NVM_DIR="/Users/mcdowell/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm- 生效环境变量
#
$ source /Users/mcdowell/.bash_profile- 修改下载源 nvm 默认是从 http://nodejs.org/dist/ 下载的, 国外服务器, 必然很慢, 好在 nvm 以及支持从镜像服务器下载包, 于是我们可以方便地从淘宝的 node dist 镜像下载:
#
$ NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node nvm install 4如果你不想每次都输入环境变量 NVM_NODEJS_ORG_MIRROR, 建议加入到 .bashrc 文件中:
# nvm
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
$ source /Users/mcdowell/.bash_profile常用 nvm 命令
- 安装:nvm install < node 版本号 >
- 设置系统默认的 Node.js 版本:nvm alias default < node 版本号>
- 切换版本:nvm use < node 版本号 >
- 列出当前的本地版本:nvm ls
- 列出远端可安装版本:nvm ls-remote
- 一键安装全局模块:nvm reinstall-packages
解决 Node.js 模块安装问题,其本身也是一个 Node.js 模块,每次安装都会内置某个版本的 npm。
- npm v2:典型的树形依赖,层次深,依赖重叠,安装时间长,但相对更清晰。
- npm v3:扁平化依赖,将依赖移到了顶层,同一模块多版本依赖时需采用 npm v2 模式,由于 Node.js 项目模块依赖非常多,因此在查找依赖时特别麻烦,虽没有 npm v2 用起来体验好,但下载速度确实快了不少。
- npm v5:自动记录依赖树,下载使用强校验,重写缓存系统等功能得到了升级和改造。代表性特征是新增了 package-lock.json 文件,在操作依赖时默认生成,用于记录和锁定依赖树的信息,与 Yarn 类似。
# 查看版本
$ npm -v
# 升级到对应版本
$ [sudo] npm install -g npm[@版本号] # sudo 可选
# eg: 在遇到使用问题的时候,一定要先查看版本,适当升级或降级是十分必要的
$ [sudo] npm install -g npm[@6.11]npm 的包安装是最核心的功能,分为本地安装(local)【没-g】、全局安装(global)【有-g】两种。
- 使用说明
# 查看npm install 使用帮助
$ npm -h install
# 将模块安装到本地 node_modules目录下,但不保存到 package.json
$ npm install [ pkg包名[@版本] ] # 包名缺省 自动按照 package.json 进行安装
$ npm install --save
$ npm i --save # 缩写
# 将模块安装到本地 node_modules目录下,但不保存到 package.json 里的 dependencies
$ npm install --save-prod # 安装依赖 [要在生产环境下使用该依赖]
$ npm install -P # 简写
# 将模块安装到本地 node_modules目录下,但不保存到 package.json 里的 devDependencies
$ npm install --save-dev # 安装 开发依赖 [仅在开发环境使用该依赖]
$ npm install -D # 简写
# 安装全局模块 如果是命令行模块,直接连接到环境变量里【如npm、@vue/cli】
$ npm install --global # 安装 开发依赖 [仅在开发环境使用该依赖]
$ npm install -g # 简写
- 关于本地安装
- 将安装包放在 node_modules(运行 npm 命令时所在的目录)下,如果没有 node_modules 目录,则会在目录下生成。
- 通过 require()来引入本地安装的包,无须指定第三方包路径。
- 关于全局安装
- 如果不是使用 nvm 安装的,安装包将放在/usr/local 【windows 在 C:\Users\主机名\AppData\Roaming\npm\node_modules】下,安装全局模块需要超级用户授权。
- 如果是使用 nvm 安装的,则需要将安装包放到用户目录的 nvm 版本对应的 bin 目录 ~/.nvm/versions/node/v6.0.0/bin/下,一般用户对于用户目录下的所有文件拥有完整权限,所以不需要增加 sudo 授权。
- 不能通过 require()来引入本地安装的包。
解决 npm 镜像访问慢的问题,提供测速、切换下载源(registry)功能。
# nrm 本身是node.js 模块 也是通过 npm 进行安装的
$ npm install -g nrm # 查看 帮助信息
$ nrm -h
# 测速 显示个安装源 延迟 推荐 cnpm or taobao
$ nrm test
# 查看源 地址 *标识当前源
$ nrm ls
# 切换源
$ nrm use <registry name>
# eg
$ nrm use cnpm
# 增加自定义源源
$ nrm add yourcompany http://registry.npm.yourcompany.com/Ubuntu 安装 g++ 依赖
#
$ sudo apt-get install g++ curl libssl-dev apache2-utils git-core build-essential下载源码并编译
#
$ git clont https://github.com/nodejs/node.git
$ cd node
$ ./configure
$ make
$ sudo make install #
$ node <fileName>创建模块
'use strict'
/* 使用 module.export 定义模块 */
module.exports = function() {
console.log('Hello CommonJS!: module.exports 定义,require 引入')
}引用模块
'use strict'
/* 使用 require 引用 模块 ,使用 CommonJS规范 */
const hello = require('./1.2.modules')
hello()编程有三等境界:
- 打日志:可用 console.log、debug 模块或 Node.js SDK 内置的 util.log 等方式。
- 断点调试:可用 Node debugger 或 VSCode 编辑器。
- 测试驱动开发:TDD 和 BDD 测试框架非常多,比如 Mocha、AVA、Jest、Cucumber 等。
- macOS 下安装
- Command Palette(⇧⌘P)输入「 Shell Command: Install 『code』 command in PATH 」。
- 重启终端,这样就可以使用 code 命令了。在任意目录里键入 code 就可以轻松打开该目录下的所有文件。
< ⌃ + ⌘ + Space > # 选择符号(包含技术符号 ⌘⌥⌃⇧⎋等)
< ⇧ + ⌘ + E > # 进入资源管理器 < ⇧ + ⌘ + F > # 进入搜索 < ⌃ + ⌘ + G > # 进入版本控制 < ⇧ + ⌘ + D > # 进入调试debug < ⇧ + ⌘ + X > # 进入扩展 < ⇧ + ⌘ + U > # 进入输出 < ⇧ + ⌘ + Y > # 进入调试控制台
< ⌘ + P > # 显示命令面板 ( 跳转文件 输入> 后,进入命令模式 ) < ⌘ + J > # 显示面板
Visual Studio Code 前端调试不完全指南 VSCode配置 Debugger for Chrome插件
1.code命令运行文件 如:< $ code src/study/2.2.HelloNode.js/hello_http.js > 或 手动打开文件,打开调试面板 2.设置断点【 点亮对应行数的小红点 】, F5 启动调试 3.浏览器访问 或者 curl 发送请求 【 如出现选择提示,选择Node 】 4.出现断点停留,开始调试
关于 launch.json program 要指定到具体执行文件。 【默认配置指向 程序 app.js 可能无法 进入debugger 模式】具体要根据自己项目情况,进行配置
如: 我要调试 src/study/2.2.HelloNode.js/hello_http.js
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
# 此种方式为指定 单个文件 调试
# 默认值为: "program": "${workspaceFolder}/app.js"
"program": "${workspaceFolder}/src/study/2.2.HelloNode.js/hello_http.js"
}
]- code 命令 打开调试文件夹 如:< $ code src/study/2.2.HelloNode >
- 打开调试面板,添加配置,进入launch.json,选择右下角 添加配置 可以选择预制配置。
- 打开你需要调试的文件 (调试的文件在当前编辑视图), 进入debugger tab选项 F5 开始调试。
launch.json 配置
"configurations": [
{
"type": "node",
# 本地启动调试
"request": "launch",
"name": "Launch Program",
# 此种方式为指定 固定文件 调试
# 对当前所打开的 文件 进行调试
"program": "${file}"
}
]launch.json 的配置项中,request 通常 有launch 和 attach 两个选项,对应着两种调试模块,具体如下。
- launch:启动程序,相当于直接在编辑器里启动 Node.js,即本地调试。
- attach:附加到进程,在编辑器外通过 node --debug 命令启动,然后附加到 debug 进程中,即远程调试。
launch.json 配置
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach",
"port": 9229
},
# 或者
{
"type": "node",
"request": "attach",
"name": "Attach by Process ID",
"processId": "${command:PickProcess}"
}
]- launch.json中添加配置 选择node attach
- 给要调试的点加上断点
- F5启动调试
如果看到调试按钮最右边有一个像电插销一样的按钮,就表示已经和远程 Node.js 线程连接成功了,剩下的就和本地调试一样了。
注意不同实际情况可能对应不同端口
在某些情况下可能需要对远程的服务器进行调试,这时只能使用远程调试方式。远程调试的配置和跨进程调试类似.
launch方式 的配置 里增加 address 等对远程机器的配置信息,如下。【当然可以通过添加配置,来选择 node:附加到远程】
launch.json 配置
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach to Remote",
"address": "TCP/IP address of process to be debugged",
"port": 9229,
"localRoot": "${workspaceFolder}",
"remoteRoot": "Absolute path to the remote directory containing the program"
}
]说明: ■ address 是 IP 地址或域名。 ■ port 是远程端口。 ■ localRoot 是本地的代码根目录。 ■ remoteRoot 是远程代码的相对目录。
(VSCode文档可参见)[https://code.visualstudio.com/docs/editor/debugging]
launch.json中有很多属性可以设置, 通过 添加配置 添加基本配置 也可通过鼠标移入,智能提示查看有那些属性可以设置。
| 配置说明 | 描述 |
|---|---|
| type | 调试的类型,node / chrome【基本上 node就是 调试node后台, chrome 就是调试 前台,当然也可以是 firefox 】 |
| version | 你定义这个配置文件的版本,生成的时候默认是0.2.0 |
| name | 配置文件的名字可以自己起名,当作说明 |
| request | 配置文件的请求类型,有launch和attach两种 |
| url | 这个是chrome插件带的,指定访问的链接【新版本已经可以不写,自行监听,但是如果写了,地址一定要对应】 |
| webRoot | 也是chrome插件带的,指定根目录或者执行文件 |
| sourceMaps | 默认是启用的,对于打包的调试,就必须开启了【sourceMaps是啥?看这里】 |
| userDataDir | 临时目录,专门保存调试过程产生的东西,这个字段是为了重新打开一个浏览器窗口,不会强制关闭已经打开的浏览器 |
| 预定变量 | 描述 |
|---|---|
| ${workspaceRoot} | VSCode中打开文件夹的路径 |
| ${workspaceRootFolderName} | VSCode中打开文件夹的路径, 但不包含"/" |
| ${file} | 当前打开的文件 |
| ${relativeFile} | 当前打开的文件,相对于workspaceRoot |
| ${fileBasename} | 当前打开文件的文件名, 不含扩展名 |
| ${fileDirname} | 当前打开文件的目录名 |
| ${fileExtname} | 当前打开文件的扩展名 |
| ${cwd} | 当前启动时的工作目录 |
