windows 上优雅的安装 node 和 npm

我一直觉得我掌握的这份优雅是被许多人所知道了,直到我发现小伙伴们都下载 .msi 来装 node ,我心中的优雅感终于压制不住。

.msi 安装

windows 的一键安装包,应该是最简单的 node 安装方式,但存在几个缺陷。

  • 比如不能安装多个 node 版本,现在 node 的版本就像火箭似的,所以多个 node 版本并行的需求还是很强烈。
  • 一键安装对 npm 的理解也存在问题,我们完全不知道安装过程中,和 npm 相关的目录有哪些,以及怎样配置这些目录。

多版本的方式当然可以去找些 nvm-windows 之类的解决方案,所以这里着重讲解和 npm 相关的东西。

优雅安装

目录

新建一个目录专门了管理 nodenpm 。 比如在 E 盘下新建一个目录 NODE ,如下:

E:\NODE\node
E:\NODE\npm-global
E:\NODE\npm-cache

node 目录用来存放 node.exe ,当然可以放多个版本; npm-globalnpm i xxxxx -g 的安装目录; npm-cachenpm 的缓存目录,避免相同的包每次都联网下载。

下载 .exe

下载可执行文件(.exe),放入上述 node 目录,这时候的目录如下:

E:/NODE/
    node/
        node.exe
        node-v0.12.0.exe
    npm-global/
    npm-cache

可以存放多个 node 版本,在命令行中可以如下使用:

node --version
node-v0.12.0 --version

当然,你现在直接运行上述命令会报错,因为 node 没有配置到环境变量。 E:\NODE\nodeE:\NODE\npm-global 都要配置到环境变量。 怎样配置环境变量就不是本文关注的了。

npm

目前为止,我们可以在命令行中执行 node 命令了,而且可以多版本共存。接下来我们要让 npm 命令顺心如意。

下载安装 npm

第一次要手动下载并安装 npm 。 在上述 npm-global 目录下新建 node_modules 目录。 来这里下载一个最新版的 npm ,将其解压至 node_modules 目录下,并将 npm-x.x.x 重命名为 npm 。 这时整体目录如下:

E:/NODE/
    node/
    npm-global/
        node_modules/
            npm/
                bin/
                xxx
    npm-cache

bin 目录下的 npm 文件和 npm.cmd 文件拷贝至 npm-global 目录下,这个时候应该就可以执行 npm --version 命令了。

设置 npm 的相关目录

不急着执行 npm install 命令。 我们建了 npm-globalnpm-cache ,是时候把它们利用起来了。

npm config set prefix "E:\NODE\npm-global" # npm install -g xxx 的包都会装到这个目录
npm config set cache "E:\NODE\npm-cache" # 缓存都会装到这个目录

现在试着安装一个包:

npm i -g es-checker
es-checker

回顾下,我们现在讲所有 node 相关的东西全集中在 E:\NODE\ 目录中,并且指定了 npm 的安装目录,npm 对我们不再是黑箱。 优雅安装方式结束。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小明plus

在2018年如何优雅的开发一个typescript语言的npm包?

很多时候,我们可能想要用 typescript 语言来创建一些模块,并提交到 npm 供别人使用,

1.3K10
来自专栏企鹅号快讯

Linux系统下常用的数据备份方法

Linux作为网络操作系统,在服务器方面的应用越来越广泛。作为专门的网络服务器,一个重要功能就是对服务器数据进行备份,以确保数据的安全。本文将介绍在Linux系...

2318
来自专栏黑白安全

缓冲区溢出说明:基础知识

软件中最常见和最古老的安全漏洞之一是缓冲区溢出漏洞。从操作系统到客户端/服务器应用程序和桌面软件的各种软件都会出现缓冲区溢出漏洞。这通常是由于编程错误以及应用程...

1401
来自专栏抠抠空间

python并发编程之多进程(理论)

一、什么是进程 进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 二、进程与程序的区别 程序:仅仅是一堆代 进程:是指打开程序运行的过程 三、...

4277
来自专栏xingoo, 一个梦想做发明家的程序员

Oozie分布式工作流——Action节点

前篇讲述了下什么是流控制节点,本篇继续来说一下什么是 Action Nodes操作节点。Action节点有一些比较通用的特性: Action节点是远程的 ...

2316
来自专栏电光石火

使用Maven创建web项目

使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 ? 我们勾选上Create a simple ...

32510
来自专栏云计算教程系列

【基础干货】Linux Shell基础教程

shell,也称为“命令行界面”或“CLI”,是与远程Linux服务器交互的主要方法。shell是一个丰富的界面,用于处理文件,管理系统和编写常见任务脚本。如果...

1504
来自专栏企鹅号快讯

数据库连接池的选择

新年的第一个工作日,愿我们的2018更好! 在基于JVM的后台开发的中,在高并发场景下,往往会有一些对象,如数据库连接、线程...等对象,它的创建和初始化需要的...

3638
来自专栏黑泽君的专栏

linux基本命令学习02

============================================================================= a....

1861
来自专栏linux驱动个人学习

Linux内核线程kernel thread详解--Linux进程的管理与调度(十)

Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。

4395

扫码关注云+社区

领取腾讯云代金券