在 MacOS X 上安装 Node.js、nvm 和 npm 的推荐方法是什么?

What is the recommended way to install Node.js, nvm and npm on MacOS X?

我想在 MacOS X 上使用 Homebrew as much as possible. What's the recommended way to install Node.js, nvm and npm

这是我的做法:

curl https://raw.githubusercontent.com/creationix/nvm/v0.20.0/install.sh | bash
cd / && . ~/.nvm/nvm.sh && nvm install 0.10.35
. ~/.nvm/nvm.sh && nvm alias default 0.10.35

这个没有 Homebrew。

nvm 很快将支持 io.js,但在发布时不支持:https://github.com/creationix/nvm/issues/590

然后使用 package.jsonnpm install.

安装每个项目的所有其他内容

我同意 noa——如果您需要 nodeio.js 的多个版本,那么 brew 不是合适的解决方案。

您可以帮助 beta 测试 io.js nvm 支持:https://github.com/creationix/nvm/pull/616

如果你只是想要 io.js 而不是切换版本,那么你可以从 https://iojs.org/dist/v1.0.2/iojs-v1.0.2-darwin-x64.tar.gz 安装 io.js 的二进制发行版;其中包括 npm,如果您不切换版本,则不需要 nvm

安装后记得更新npmsudo npm install -g npm@latest

  1. 使用homebrew安装nvm:

    brew update
    brew install nvm
    source $(brew --prefix nvm)/nvm.sh
    

    将最后一条命令添加到 .profile.bashrc.zshrc 文件中,以免在每次终端启动时再次 运行 它。因此,例如将其添加到 .profile 运行:

    echo "source $(brew --prefix nvm)/nvm.sh" >> ~/.profile
    

    如果您在使用 brew 安装 nvm 时遇到问题,您可以手动安装(参见 here

  2. 使用nvm安装nodeiojs(你可以安装任何你想要的版本):

    nvm install 0.10
    # or
    nvm install iojs-1.2.0
    
  3. npmnode(或 iojs)一起发货,因此在安装 node(或 iojs).您可能希望将其升级到最新版本:

    $ npm install -g npm@latest
    

    UPD 之前的版本是 npm update -g npm。感谢@Metallica 指出正确的方法(请看下面的评论)。

  4. 使用npm安装ionic:

    npm install -g ionic
    
  5. ngCordova呢:您可以使用npmbower安装它。我不知道哪种变体更适合你,这取决于你想在客户端使用的包管理器。所以我将描述它们:

    1. 使用npm:转到您的项目文件夹并在其中安装ng-cordova

      npm install --save ng-cordova
      
    2. 使用bower:安装凉亭:

       npm install -g bower
      

      然后转到您的项目文件夹并在其中安装 ngCordova:

       bower install --save ngCordova
      

PS

  1. 某些命令可能需要超级用户权限
  2. npm install some_module 的缩写形式是 npm i some_module

如果您之前使用 brew 安装了 node,那么在安装 node "the right way" 之前您应该清理一堆额外的文件。另外,我必须在我的启动脚本中添加一些设置才能使事情顺利进行。

我写了一个脚本来简化这件事。

# filename:  install-nvm-npm-node
# author:    Lex Sheehan
# purpose:   To cleanly install NVM, NODE and NPM
# dependencies:  brew

NOW=$(date +%x\ %H:%M:%S)
CR=$'\n'
REV=$(tput rev)
OFF=$(tput sgr0)
BACKUP_DIR=$HOME/backups/nvm-npm-bower-caches/$NOW
MY_NAME=$(basename [=10=])
NODE_VER_TO_INSTALL=
if [ "$NODE_VER_TO_INSTALL" == "" ]; then
    NODE_VER_TO_INSTALL=v0.12.2
fi
if [ "`echo "$NODE_VER_TO_INSTALL" | cut -c1-1`" != "v" ]; then
    echo """$CR""Usage:   $ $MY_NAME <NODE_VERSION_TO_INSALL>"
    echo "Example: $ $MY_NAME v0.12.1"
    echo "Example: $ $MY_NAME $CR"
    exit 1
fi
echo """$CR""First, run:  $ brew update"
echo "Likely, you'll need to do what it suggests."
echo "Likely, you'll need to run: $ brew update$CR"
echo "To install latest node version, run the following command to get the latest version:  $ nvm ls-remote"
echo "... and pass the version number you want as the only param to $MY_NAME. $CR"
echo "Are you ready to install the latest version of nvm and npm and node version $NODE_VER_TO_INSTALL ?$CR"
echo "Press CTL+C to exit --or-- Enter to continue..."
read x

echo """$REV""Uninstalling nvm...$CR$OFF"
# Making backups, but in all likelyhood you'll just reinstall them (and won't need these backups)
if [ ! -d "$BACKUP_DIR" ]; then 
    echo "Creating directory to store $HOME/.nvm .npm and .bower cache backups: $BACKUP_DIR"
    mkdir -p $BACKUP_DIR
fi 
set -x
mv $HOME/.nvm   $BACKUP_DIR  2>/dev/null
mv $HOME/.npm   $BACKUP_DIR  2>/dev/null
mv $HOME/.bower $BACKUP_DIR  2>/dev/null
{ set +x; } &>/dev/null

echo "$REV""$CR""Uninstalling node...$CR$OFF"
echo "Enter your password to remove user some node-related /usr/local directories"
set -x
sudo rm -rf /usr/local/lib/node_modules
rm -rf /usr/local/lib/node
rm -rf /usr/local/include/node
rm -rf /usr/local/include/node_modules
rm /usr/local/bin/npm
rm /usr/local/lib/dtrace/node.d
rm -rf $HOME/.node
rm -rf $HOME/.node-gyp
rm /opt/local/bin/node
rm /opt/local/include/node
rm -rf /opt/local/lib/node_modules
rm -rf /usr/local/Cellar/nvm
brew uninstall node 2>/dev/null
{ set +x; } &>/dev/null

echo "$REV""$CR""Installing nvm...$CR$OFF"

echo "++brew install nvm"
brew install nvm 
echo '$(brew --prefix nvm)/nvm.sh'
source $(brew --prefix nvm)/nvm.sh

echo "$REV""$CR""Insert the following line in your startup script (ex: $HOME/.bashrc):$CR$OFF"
echo "export NVM_DIR=\"$(brew --prefix nvm)\"; [ -s \"$NVM_DIR/nvm.sh\" ] && . \"$NVM_DIR/nvm.sh\"$CR"
NVM_DIR="$(brew --prefix nvm)"

echo """$CR""Using nvm install node...$CR"
echo "++ nvm install $NODE_VER_TO_INSTALL"
nvm install $NODE_VER_TO_INSTALL
NODE_BINARY_PATH="`find /usr/local/Cellar/nvm -name node -type d|head -n 1`/$NODE_VER_TO_INSTALL/bin"
echo "$REV""$CR""Insert the following line in your startup script (ex: $HOME/.bashrc) and then restart your shell:$CR$OFF"
echo "export PATH=$PATH:$NODE_BINARY_PATH:$HOME/.node/bin"

echo """$CR""Upgrading npm...$CR"
echo '++ install -g npm@latest'
npm install -g npm@latest
{ set +x; } &>/dev/null
echo "$REV""$CR""Insert following line in your $HOME/.npmrc file:$OFF"
echo """$CR""prefix=$HOME/.node$CR"
echo "Now, all is likley well if you can run the following without errors:  npm install -g grunt-cli$CR"
echo "Other recommended global installs: bower, gulp, yo, node-inspector$CR"

我写了一篇短文 here 详细说明了为什么会这样 "the right way"。

如果您需要安装 iojs,请像这样使用 nvm 安装:

nvm install iojs-v1.7.1

要安装 brew,只需查看其 home page

其余部分请参阅 alexpods 答案。

您应该使用 nvm 安装 node.js,因为这样您在安装全局包时就不必提供超级用户权限(您可以简单地执行 "npm install -g packagename" 而无需预先设置 'sudo')。

但是,Brew 在其他方面也很棒。每当我可以选择使用 Bower 安装某些东西时,我倾向于偏向于 Bower。

我正在使用 n(节点版本管理)

您可以通过两种方式安装它

brew install n

npm install -g n

您可以在不同版本的node和io之间切换。这是我在不带参数的情况下调用 n 时来自当前环境的示例:

$ n

  io/3.3.1
  node/0.12.7
  node/4.0.0
  node/5.0.0
ο node/5.10.1 

我来晚了,但我不喜欢其他答案

正在安装 Homebrew

适合酿造 运行

"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

正在安装节点和 npm

不应该使用brew安装nodenpm

我看到有几个地方建议您应该使用 Homebrew 安装 Node(比如 alexpods 答案,在这个 Team Treehouse blog Post) but installing this way you're more prone to run into issues as npm and brew are both package managers and you should have a package manager manage another package manager this leads to problems, like this bug offical npm issues Error: Refusing to delete: /usr/local/bin/npm or this

您可以在 DanHerbert 的 post Fixing npm On Mac OS X for Homebrew Users 中阅读有关该主题的更多信息,他接着说

Also, using the Homebrew installation of npm will require you to use sudo when installing global packages. Since one of the core ideas behind Homebrew is that apps can be installed without giving them root access, this is a bad idea.

对于其他一切

我会使用 npm;但是您真的应该按照网站上的说明按照每个模块的安装说明进行操作,因为他们比其他任何人都更清楚自己遇到的任何问题或错误

使用 zsh 和 Homebrew 安装:

brew install nvm  <=== This is not recommended by NVM. They want to run their shell script instead

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

然后将以下内容添加到 ~/.zshrc 或您想要的 shell 配置文件:

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

然后安装一个node版本使用

nvm install 7.10.1
nvm use 7.10.1

使用 nvm 安装 Node.js,而不是 Homebrew

在大多数答案中,推荐的安装方式 nvm 是使用 Homebrew。

不要这样做。

关于nvmGithub Readme很明显是说:

Homebrew installation is not supported. If you have issues with homebrew-installed nvm, please brew uninstall it, and install it using the instructions below, before filing an issue.

改用下面的方法

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

该脚本将 nvm 存储库克隆到 ~/.nvm 并将源行添加到您的配置文件(~/.bash_profile~/.zshrc~/.profile~/.bashrc ).

然后使用nvm安装节点。例如安装最新的 LTS 版本:

nvm install 16

清洁无忧。它也会将此设置为您的默认 Node.js 版本,因此您应该已准备就绪。

2021 年更新

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

MAC 的疑难解答:

从 macOS 10.15 开始,默认 shell 是 zsh,nvm 会寻找 .zshrc 进行更新,默认安装 none。再次使用 touch ~/.zshrc 和 运行 安装脚本创建一个。

如果使用bash,之前默认shell,运行touch ~/.bash_profile创建必要的配置文件,如果不存在。

您可能需要重新启动终端实例或 运行。 ~/.nvm/nvm.sh。重新启动 terminal/opening 一个新的 tab/window,或者 运行ning source 命令将加载命令和新配置。

您之前使用过bash,但您安装了 zsh。您需要手动将这些行添加到 ~/.zshrc 和 运行 。 ~/.zshrc.