有时候几乎每周都会发布新版本的 Node.js —— 每隔几周发布一次小版本,每隔几个月发布一次主要版本。如果你是一个需要在不同程序和项目之间切换的码农,可能会发现需要运行不同版本的 Node。
幸运的是,有几种不错的方法可以安装多个版本的 Node 并根据需要进行切换。本文将讨论和比较在 Linux/Mac 环境下的两个流行的 Node 版本管理器:NVM for Windows 和 n Node version manager。
提示:Windows 和 Linux/Mac 有不同的 NVM 实现;但是 n 的 npm 包仅在 Linux/Mac 上得到支持。
为了进行比较,让我们假设你正在处理两个程序。程序 1 是在 Node 6.17.1上运行的 angular 5 程序。程序 2 是在 Node 8.16.0 上运行的 Angular 7 程序。以下是你需要完成的任务:
实际上,你需要三个版本的 Node 才能完成任务,因为你需要将程序 2 升级到 Node 10.9或更高版本才能支持 Angular 8 的升级。
从技术上讲,有两个完全独立的NVM项目,它们在不同的操作系统上提供类似的功能,但是彼此之间保持独立:
安装非常简单,从 GitHub 上下载 NVM for Windows 安装程序的最新版本。在撰写本文时,最新版本是 1.1.7 。下载并解压缩 nvm-setup.zip 并双击要安装的可执行文件。
安装程序会将 NVM 放在计算机上相应的文件夹中,并更新系统环境变量,以便可以在命令行使用 nvm 和将来要安装的 node。
提示:如果你希望安装到自己的文件夹下,请下载 nvm-noinstall.zip 并将其解压缩到你想要的任何位置。并运行其中的 install.cmd 来设置必要的系统环境变量。提示:GitHub 上提供了详细的安装说明。
安装完成后,打开命令窗口并确认 NVM 可用:
D:\>nvm version
1.1.7
如果你没忘的话,你需要使用三个不同版本的 Node 来处理两个不同的程序。首先运行程序 1。某些命令的输出用 ... 截断以节省空间。
D:\>nvm list available
| CURRENT | LTS | OLD STABLE | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
| 12.4.0 | 10.16.0 | 0.12.18 | 0.11.16 |
...
D:\>nvm install 6.17.1
Downloading node.js version 6.17.1 (64-bit)...
Complete
Creating C:\Users\Brian\Downloads\nvm-noinstall\temp
Downloading npm version 3.10.10... Complete
Installing npm v3.10.10...
Installation complete. If you want to use this version, type
nvm use 6.17.1
D:\>nvm use 6.17.1
D:\>nvm list
* 6.17.1 (Currently using 64-bit executable)
D:\>node -v
v6.17.1
D:\>cd application1
D:\application1>npm install
...
D:\application1>npm start
> application1@0.0.0 start D:\application1
> ng serve
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
...
以下是你刚刚利用 NVM 的一些关键功能完成的工作:
一旦 Node 被安装并激活,那就像往常一样。你可以遵循程序所需的任何 Node/npm工作流程。
提示:你的 Node 版本彼此之间被完全隔离。例如,如果在一个版本的 Node 上全局安装软件包,则该软件包将无法在其他版本的 Node 上使用。
因此,你已在程序1中修复了错误 x,现在你已准备好将程序 2 升级到Angular 8:
D:\nvm install 8.16.0
...
D:>nvm use 8.16.0
Now using node v8.16.0 (64-bit)
D:>cd application2
D:\application2>npm install
...
D:\application2>npm start
...
D:\application2>nvm install 10.16.0
...
D:\application2>nvm use 10.16.0
Now using node v10.16.0 (64-bit)
D:\application2>npm i -g @angular/cli@8
...
D:\application2>ng update @angular/cli @angular/core
...
D:\application2>npm install
...
D:\application2>npm start
...
在 NVM(和 Angular CLI)的帮助下,你通过几个命令快速完成了升级:
n Node version manager 提供了一个更简单的 CLI,用于在 Node 版本之间进行安装和切换。它仅在Linux 或 Mac 操作系统上受到支持。
提示:详细的安装和使用说明可在 GitHub上的 tj/n 存储库中找到。
如果你已经安装某个版本的 Node 和 npm ,则可以用 npm install -g n 来安装 n,就像安装其他 NPM 包一样。
如果你还没有安装 Node 或 npm,可以用 GitHub 中的 bash 脚本安装 n。这是它的样子:
提示:你必须安装 Git 才能使用 bash 脚本安装 n。
~$ curl -L https://git.io/n-install | bash
...
=== n successfully installed.
The active Node.js version is: v10.16.0
Run `n -h` for help.
To update n later, run `n-update`.
To uninstall, run `n-uninstall`.
IMPORTANT: OPEN A NEW TERMINAL TAB/WINDOW or run `. /home/brian/.bashrc`
before using n and Node.js.
===
~$ . /home/brian/.bashrc
~$ n
node/10.16.0
通过从 GitHub 下载并运行 n-install 脚本来安装 n。n 默认安装了一个版本的 Node。
程序 1 需要 Node v6.17.1,因此你需要先安装它,然后再运行程序。
~$ n 6.17.1
install : node-v6.17.1
mkdir : /home/brian/n/n/versions/node/6.17.1
fetch : https://nodejs.org/dist/v6.17.1/node-v6.17.1-linux-x64.tar.gz
####################################################################################################################################### 100.0%
installed : v6.17.1
~$ node -v
v6.17.1
~$ cd application1
~/application1$ npm install
...
~/application1$ npm start
> application1@0.0.0 start ~/application1
> ng serve
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
...
用于安装和激活 Node 版本的 n 命令很简单:n 6.17.1。你也可以用 n latest 获取最新版本的 Node 或 n lts 来获取最新的 LTS 版 Node。
安装 Node 后,程序可以照常运行。
提示:与 NVM 类似,Node 版本完全相互隔离。例如不同的 Node 版本之间不共享全局安装的软件包。
接下来,你需要运行 程序 2 并将其升级到 Angular 8:
$ n 8.16.0
...
$ cd application2
~/application2$ npm install
...
~/application2$ npm start
...
~/application2$ n 10.16.0
...
~/application2$ npm i -g @angular/cli@8
...
~/application2$ ng update @angular/cli @angular/core
...
~/application2$ npm install
...
~/application2$ npm start
...
为了确保程序2在升级之前能够运行,需要安装 Node v8.16.0 。然后按照 Angular 8 的要求安装 Node v10.16.0。全局安装 Angular CLI,使用 ng update 对程序进行更新。最后程序在升级后开始测试。
你可能已经注意到,用 n <version> 命令安装和切换到新版本的 Node 会稍微快一点。
n 提供了直接调用特定 Node 二进制文件的功能,而无需显式切换到该版本的 Node。 NVM 则没有类似的功能。
~$ echo "console.log('Node version: ' + process.version)" > index.js
~$ node -v
v8.16.0
~$ n use 10.16.0 index.js
Node version: v10.16.0
~$ n use 12.4.0 index.js
Error: '12.4.0' is not installed
~$ node -v
v8.16.0
在上面的示例中,当前 Node 的版本是 v8.16.0。当运行 n use 10.16.0 index.js 时,输出表明用于执行脚本的 Node 版本是 10.16.0。执行后,当前 Node 的版本仍然是 v8.16.0。请注意,n use 命令所请求的 Node 版本需要由 n 安装。
在某些情况下,这个功能非常有用。例如,有一个构建服务器,用于构建需要不同 Node 版本的程序。可以用 n use 命令触发每个构建,并能够指定该程序所需的 Node 版本。
NVM for Windows 和 n 有许多常见功能,也有一些独特的功能,这些功能会影响你使用每个工具的方式和位置。以下是一些主要差异的摘要:
能力 | NVM for Windows | n |
---|---|---|
安装 | Windows 安装程序或独立安装 | Bash 脚本或 npm包 |
操作系统支持 | Windows(适用于Linux/Mac的不同实现) | 仅限 Linux/Mac |
列出要安装的 Node 的可用版本? | Yes | No |
列出已安装的Node版本? | Yes | Yes |
在不同的Node版本之间安装和切换? | Yes | Yes |
直接访问Node二进制文件? | No | Yes |
选择要安装的架构(x86,x64)? | Yes | Yes |
你可以选择在 Linux/Mac 上使用 n,因为它的 api 很简单。或者你可以在 Windows 上选择 NVM for Windows,同时在 Linux 构建服务器上选择 n,并在 Linux 构建服务器上使用 n 来管理不同构建任务的 Node 版本。
无论怎样,这两种工具都能很好地满足能够动态切换 Node 版本的需求。
作者:Brian De Sousa,原文来自:https://blog.logrocket.com/switching-between-node-versions-during-development/
翻译:疯狂的技术宅
关于 Node.js 里 ES6 Modules 的一次更新说明,总结来说:CommonJS 与 ES6 Modules 之间的关键不同在于代码什么时候知道一个模块的结构和使用它。
在这个教程中,我们会开发一个命令行应用,它可以接收一个 CSV 格式的用户信息文件,教程的内容大纲:“Hello,World”,处理命令行参数,运行时的用户输入,异步网络会话,美化控制台的输出,封装成 shell 命令,JavaScript 之外
首先你需要生成https证书,可以去付费的网站购买或者找一些免费的网站,可能会是key或者crt或者pem结尾的。不同格式之间可以通过OpenSSL转换
nodej项目在微信环境开发,nodejs的异步特效,会导致请求没有完成就执行下面的代码,出现错误。经过多方查找,可以使用async模块来异步转同步,只有前一个function执行callback,下一个才会执行。
3G的大文件分1500个2M二进度文件,通post方法发送给node服务,服务器全部接收到文件后,进组装生成你上文件。
JavaScript比C的开发门槛要低,尽管服务器端JavaScript存在已经很多年了,但是后端部分一直没有市场,JavaScript在浏览器中有广泛的事件驱动方面的应用,考虑到高性能、符合事件驱动、没有历史包袱这3个主要原因,JavaScript成为了Node的实现语言。
node.js的第一个基本论点是I / O的性能消耗是很昂贵。因此,使用当前编程技术的最大浪费来自于等待I / O完成。有几种方法可以处理性能影响
在前后端分离的开发中,通过 Restful API 进行数据交互时,如果没有对 API 进行保护,那么别人就可以很容易地获取并调用这些 API 进行操作。那么服务器端要如何进行鉴权呢?
我们经常跟Node.js打交道,即使你是一名前端开发人员 -- npm脚本,webpack配置,gulp任务,程序打包 或 运行测试等。即使你真的不需要深入理解这些任务,但有时候你会感到困惑,会因为缺少Node.js的一些核心概念而以非常奇怪的方式来编码。
运行在 Node.js 之上的 Webpack 是单线程模型的,也就是说 Webpack 需要处理的任务需要一件件挨着做,不能多个事情一起做。happypack把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!