运作在老的 Node.JS 版本下的主次往往都不可能运维在新的,那么有没有这么四个工具得以独家管理分裂版本的node环境呢

Daemon

既然如此是劳务,就要运转在后台(Crontab 可能 Service)。那么
n
的选择就亟须采纳完全路径,例如:

/usr/local/bin/n use 0.10.41 index.js

nvm 提供了 nvm use 命令。这些命令的行使方法和 install 命令类似。

nvm vs. n

大多数 Node.JS 开发者,甚至很多前端、React-Native 开发者都知情
nvm,而且在工作中也屡次用它来切换
Node.JS 的版本。但是
nvm
却不相符运营在服务器上,因为它的缺省配置都是在当前支付用户下的,并且以支出时切换
Node.JS 作为它的主要性场景。

在服务器上,则要求用到 TJ
的写的其余一个工具:n。本文不是
n
的学科,所以最棒你先去看看官网的
README

n 能够因此 npm
全局安装,由此其推行本体缺省在 /usr/local/lib/node_modules/n 下,有个
Symbolic Link 在 /usr/local/bin/n。通过
n 下载的不一样版本的
Node.JS 文件,则被放在 /usr/local/n/versions/node 上边(假诺您安装过
iojs,那么还会有 iojs 的目录):

Node.JS 安装目录

即使 n
升级了,这么些安装过的不等版本的 Node.JS 文件也都在,无需重新安装。

您能够先安装多少个 Node.JS 的版本:

n 0.10.41
n 5.4.1

node 版本管理工科具还有3个是 TJ大神的 n 命令,n 命令是用作1个 node
的模块而留存,而 nvm 是贰个独立于 node/npm 的外表 shell 脚本,由此 n
命令相比 nvm 越发局限。

pm2

pm2
比较尤其,它和谐从全局的 node 来 fork 服务进度。所以您必要报告
pm2
用哪个程序来作为服务程序的解释器,写法如下:

> pm2 -f start index.js --interpreter `n bin 4.2.4`

nvm 正是为缓解这么些题材的,nvm 是 Mac 下的 node 管理工科具,有点类似管理
Ruby 的 rvm。

生产条件尽量少用全局工具

骨子里在生产环境下(甚至在大部费用条件下),笔者都建议将这个全局工具安装在本工程的目录下安装一份,例如,通过
npm install gulp 而不是 npm install gulp -g

这一个工具会棉被服装置到当前目录下的 ./node_modules/.bin
中,引用那里的版本能够制止全局版本争辨:

> ./node_modules/.bin/gulp your-gulp-task

而不是:

> gulp your-gulp-task

另外,package.json 中的 scripts 也会将 ./node_modules/.bin
插足到可执行文件的搜寻目录中, 所以在 package.jsonscripts
中是能够简写为:

  "scripts": {
    "start": "gulp your-gulp-task"
  },

npm 或先期到 ./node_modules/.bin 里找 gulp

那么些办法能够让你的类别的自包涵性更好,降低了大局依赖带来的本子争论。

** 过了二日发现,有人就以此题材全局难题发了篇作品: The Issue With
Global Node
Packages

测试程序

下一场随便创建个目录,写个 index.js:

console.log(process.version)
console.log(process.argv)

执行 n use 0.10.41 index.js,返回:

v0.10.41
[ '/usr/local/n/versions/node/0.10.41/bin/node',
  '/Users/rongshen/trash/nv/index.js' ]

执行 n use 5.4.1 index.js,返回:

v5.4.1
[ '/usr/local/n/versions/node/5.4.1/bin/node',
  '/Users/rongshen/trash/nv/index.js' ]

看,你的顺序能够通过那种办法运营在分化的 Node.JS
版本下,还不耽误传参数。

sudo rm /usr/local/bin/npmsudo rm /usr/local/share/man/man1/node.1sudo rm /usr/local/lib/dtrace/node.dsudo rm -rf ~/.npmsudo rm -rf ~/.node-gypsudo rm /opt/local/bin/nodesudo rm /opt/local/include/nodesudo rm -rf /opt/local/lib/node_modules

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

作者有一台云主机,已经运维了少数年。下边跑了成千成万非常不佳的服务,大多数都以用
Node.JS 写的。由于开发和布署的光阴差别,那些劳动运作在 Node.JS
的不如版本下。运维在老的 Node.JS 版本下的先后往往都不可能运作在新的
Node.JS
版本下,笔者也没兴趣(精力)去把它们逐一升级。由此小编就有了那般的急需,差异版本的
Node.JS 需求在同一台服务器上 Side By Side 地运行,且互相不惊扰。

每当大家设置了三个新本子 Node 后,全局环境会自动把那几个新本子设置为默认。

从其它全局 Node.JS Tools 运维

偶尔,大家的劳务是从其余全局 Node.JS 工具运维的,例如
forever。那么能够率先找出 forever 的相对路径:

> which forever
/usr/local/bin/forever

接下来实施:

> /usr/local/bin/n use 0.10.41 /usr/local/bin/forever index.js

forever 相比尤其之处在于,它能够通过 -c 参数钦命运营的 Node.JS
程序的本子,因而你也得以写成:

> forever -c `n bin 0.10.41` index.js
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
v0.10.41
[ '/usr/local/n/versions/node/0.10.41/bin/node',
  '/Users/rongshen/trash/nv/index.js' ]
error: Forever detected script exited with code: 0

上面的 warnerror 不用去管。那里运用了 n bin 0.10.41,这个
bin 参数是用来回到特定 Node.JS 版本的装置目录的,例如:

> n bin 0.10.41
/usr/local/n/versions/node/0.10.41/bin/node

是因为 npm 安装的模块路径均为 /usr/local/lib/node_modules,当使用 n
切换分歧的 node 版本时,实际上会共用全局的 node/npm 目录。
由此不可能很好的满意按差别 node 版本选择分歧全局 node 模块的需要。

nvm unalias Latest-LTS-version

nvm ls

从远程下载 install.sh 脚本并推行。注意这些版本年数字 v0.33.11
会随着项目支付而转变。随时通过官方最新安装命令来检查最新安装版本是有便宜的。

血红箭头是眼下正值使用的本子

首先,打开你 Finder,按
shift+command+G,打开前往文件夹的窗口,分别输入下列目录进去以往剔除
nodenode_modules 相关的文本和文书夹:

  • 安装新型不平稳版本的 Node
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
nvm install v7.3.0 --reinstall-packages-from=6.11.0
nvm use Latest-LTS-version

自身当下版本是6.4.1,切换来刚安装的摩登的版本 8.12.0

您能够由此以下命令来列出远程服务器上拥有的可用版本:

本来也能够因而上面这几个命令撤废小名:

每一趟执行切换的时候,系统都会把 node
的可执行文件链接放到一定版本的公文上。

我们得以透过创办项目目录中的 .nvmrc 文件来钦赐要利用的 Node
版本。之后在项目目录中履行 nvm use 即可。.nvmrc
文件内容只需求服从上文提到的语义化版本规则即可。别的还有个工具叫做
avn,能够自动化那么些进程。

在官网下载的 node
安装包,运维后会自动安装在全局目录,使用进程中不时会赶上有些权限难题,所以推举根据以下方法卸载全局安装的
node/npm。

在大家的一般性支出中有没有碰着这么的标题:
手上有少数个品种,每一种品种正视差别版的 NodeJS
运营条件,又不敢茫然把富有的依赖版本都升高为新型的,那么有没有诸如此类2个工具得以分级管理区别版本的node环境呢?答案是早晚的。

nvm install unstable
nvm install node

我们给 8.12.0 那么些版本号起了2个名字叫做
Latest-LTS-version,然后大家能够运转:

也得以利用以下命令切换来最新版:

nvm use node
  • 在时下终端的子进度中运作特定版本的 Node

或者

  • 直接运维特定版本的 Node
nvm which 7.3.0

澳门金冠网站主页 1image.png

nvm 会寻找 8.12.x 中最高的版本来安装。

nvm install 8.12

nvm 遵循语义化版本命名规则。例如,你想安装新型的 8.12
体系的流行的一个版本的话,能够运维:

澳门金冠网站主页 2image.png

nvm ls-remote
  • 安装新型版 Node

大家还是能用 nvm 给分裂的版本号设置别称:

nvm install 8.12.0

每种版本的 Node 都会自带3个差别版本的 npm,能够用 npm -v 来查看 npm
的本子。全局安装的 npm 包并不会在区别的 Node
环境中国共产党享,因为那会滋生包容难点。它们被放在了分歧版本的目录下,例如
~/.nvm/versions/node/<version>/lib/node_modules</version> 那样的目录

nvm run 7.3.0 --version
nvm use 8.12.0
  • 承认有些版本Node的门路
nvm exec 7.3.0 node --version

譬如,大家要设置8.12.0本子,能够用如下命令:

那正是说难点来了,我们设置过的 npm
包,都要重复再装1遍?幸运的是,咱们有个方法来化解我们的标题,运营上面那么些命令,能够从一定版本导入到大家将要安装的新本子
Node:8.12.0

nvm alias Latest-LTS-version 8.12.0
  • 打开 /usr/local/lib,删除 nodenode_modules
    相关的文件和文件夹
  • 打开 /usr/local/include,删除 nodenode_modules
    相关的文本和文件夹
  • 一旦你是使用的 brew install node 安装的
    NodeJS,那么您还须求在终极中执行 brew uninstall node 命令来卸载
  • 反省你的个人主文件夹下边包车型大巴持有的 locallib 以及 include
    文件夹,并且删除全体与 node澳门金冠网站主页, 和 node_modules 相关的文件以及文件夹
  • 打开 /usr/local/bin 并删除 node 可执行文件

您可能还须要在您的终极中输入一些附加的指令:

相关文章