Alain's Blog

  1. 首页
  2. Node.js
  3. 正文

Node.js之3m安装法

2023年9月19日 1167点热度 2人点赞 0条评论

Node.js

Node.js的3m安装法,包括版本管理器nvm,包管理器npm,源管理器nrm,适合在开发环境中进行多个Node.js版本的管理

转载请注明出处,本文仅用于学习交流,不对之处,恳请指正 ,部分图片摘取网络,如有侵权请联系

Node.js简介

  • Node.js is an open-source, cross-platform JavaScript runtime environment.

  • Node.js是基于谷歌Chrome V8引擎的JavaScript运行环境,同时也支持使用微软的ChakraCore引擎。

  • Node.js将每个I/O操作都集成到libuv里,使得开发者在编写代码的过程中对I/O并发操作无感。

  • Node.JS具有事件驱动、非阻塞I/O等特性。

  • Node.JS使用于I/O密集的网络应用开发,对于CPU密集型应用Node.JS可以使用C/C++扩展机制来实现。

3m安装法

我是看狼叔《更了不起的Node.js》中介绍的一种管理node.js的方式,其中3m分别指nvm, npm, nrm

  1. nvm 用于开发阶段解决多版本共存与切换的问题,可以简单理解为Node.js的版本管理工具

  2. npm 用于解决Node.js模块安装问题,可以简单理解为模块管理工具,本身也是一个Node.js的模块

  3. nrm 用于管理npm的下载源,本身也是一个Node.js的模块

Node.js的版本管理工具 nvm

Github: https://github.com/nvm-sh/nvm

安装nvm

https://github.com/nvm-sh/nvm#installing-and-updating

  1. 安装

    wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
  2. 配置环境变量

    安装完成后,一般会帮我们修改~/.bashrc或者~/.zshrc文件,但是在当前窗口并不会直接生效,我们可以通过 source ~/.bashrc来使环境变量生效,也可以直接通过来使环境变量生效

    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
    [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

    如果重新命令行窗口时环境变量没有生效,我们可以在~/.bashrc或者~/.zshrc文件最后追加

    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
    [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
  3. 显示安装版本

    需要关闭当前命令行窗口,并重新打开
    或者声明环境变量

    nvm --version

安装并使用node.js

  1. 安装最新版本

    nvm install node # "node" is an alias for the latest version
  2. 安装指定版本

    nvm install 14.7.0 # or 16.3.0, 12.22.1, etc
  3. 显示可安装版本

    nvm ls-remote
  4. 使用指定版本

    nvm use 18 # or 16.3.0, 12.22.1, etc
  5. 获取安装目录

    nvm which 18 # or 16.3.0, 12.22.1, etc
  6. 指定默认版本

    nvm alias default node # this refers to the latest installed version of node
    nvm alias default 18 # this refers to the latest installed v18.x version of node
    nvm alias default 18.12  # this refers to the latest installed v18.12.x version of node
  7. 列出本地已安装版本

    nvm ls
  8. 全局重装模块

    nvm reinstall-packages node
    nvm reinstall-packages 18 # this refers to the latest installed v18.x version of node
  9. 指定下载源

    可以将以下命令追加到~/.bashrc使之固定生效

    export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist

进入项目目录自动切换Node.js版本

本文仅展示使用bash时的情况,如果需要更多其他环境的配置请参考官方Github文档

追加以下代码到~/.bashrc文件中

cdnvm() {
    command cd "$@" || return $?
    nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')

    # If there are no .nvmrc file, use the default nvm version
    if [[ ! $nvm_path = *[^[:space:]]* ]]; then

        declare default_version;
        default_version=$(nvm version default);

        # If there is no default version, set it to `node`
        # This will use the latest version on your machine
        if [[ $default_version == "N/A" ]]; then
            nvm alias default node;
            default_version=$(nvm version default);
        fi

        # If the current version is not the default version, set it to use the default version
        if [[ $(nvm current) != "$default_version" ]]; then
            nvm use default;
        fi

    elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
        declare nvm_version
        nvm_version=$(<"$nvm_path"/.nvmrc)

        declare locally_resolved_nvm_version
        # `nvm ls` will check all locally-available versions
        # If there are multiple matching versions, take the latest one
        # Remove the `->` and `*` characters and spaces
        # `locally_resolved_nvm_version` will be `N/A` if no local versions are found
        locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')

        # If it is not already installed, install it
        # `nvm install` will implicitly use the newly-installed version
        if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then
            nvm install "$nvm_version";
        elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
            nvm use "$nvm_version";
        fi
    fi
}

alias cd='cdnvm'
cdnvm "$PWD" || exit

Node.js的包管理工具 npm

对Node.js的包进行安装、更新、删除、发布、搜索、查看等
npm是Node.js的一个模块,每个不同版本的Node.js安装时都会内置不同版本的npm

  • npm v2:使用的依赖方式是嵌套,是典型的树形依赖
  • npm v3:使用的依赖方式是扁平化依赖,当同一模块多版本依赖时使用npm v2的模式,有查找麻烦的缺点,但是下载速度较v2版本有很大的提升
  • npm v5:使用的时自动记录依赖书,下载使用强校验,新增了package-lock.json这一特征,在操作依赖时默认生成,用于记录与锁定依赖树信息。
  1. 安装模块

    1. -g: 安装全局模块,如果时命令行模块,会直接链接到环境变量里
    2. -P: 生产环境,安装到工程目录下的node_modules,同时保存到package.json的dependencies中
    3. -D: 开发环境,安装到工程目录下的node_modules,同时保存到package.json的devDependencies中,一般用于开发测试工具的安装
# 普通安装
npm install debug

# 全局安装
npm install -g debug

# 保存依赖到package.json中
npm i --save

需要注意的是,没有使用nvm安装的Node.js版本内置的npm在安装全局模块的时候,安装包会放在/usr/local下,这需要管理员权限。而是用nvm安装的Node.js版本内置的npm在~/.nvm/version/node/xxx/bin目录下,基本不会存在权限问题

当全局模块跟本地模块安装了相同的包的时候,会优先使用本地安装的包

Node.js的源管理工具 nrm

  1. 安装

    # nrm本身是Node.js的一个包
    # 为了方便使用,我们将其安装到全局模块中,这样就可以直接使用命令行工具使用nrm
    npm install -g nrm
  2. 测速

    nrm test

    nrm test

  3. 查看源

    nrm ls

    nrm ls

  4. 切换源

    nrm use taobao

    选中的源在使用nrm ls的时候会在最前面显示*

    nrm use taobao

  5. 新增私有、第三方源

    nrm add repos_name https://your_repos_url

自编译Node.js

Github官方仓库
Node.js是C/C++代码,是Javascript的运行时环境

  1. Node.js支持python3编译,安装编译工具

    sudo apt-get install python3 g++ make python3-pip git
  2. 克隆Node仓库

    git clone https://github.com/nodejs/node.git
  3. 配置

    cd node && ./configure
  4. 开始编译

    make -j8

参考

[1] 狼叔.狼书.卷1,更了不起的Node.js[M].北京:电子工业出版社,2019.7

标签: Javascript Node.js
最后更新:2023年9月19日

Alain

看了我的文,就是我的人,点个赞再走成不成

点赞

文章评论

取消回复

文章目录
  • Node.js简介
  • 3m安装法
  • Node.js的版本管理工具 nvm
    • 安装nvm
    • 安装并使用node.js
    • 进入项目目录自动切换Node.js版本
  • Node.js的包管理工具 npm
  • Node.js的源管理工具 nrm
  • 自编译Node.js
  • 参考

COPYRIGHT © 2022 Alain's Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang