【原】nodejs全局安装和本地安装的区别

来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,咱们帮忙去解决问题。html

转型后是这样的,团队成员更多须要去寻找业务的方向,思考能为商户或者业务作点什么来体现其身价值,这样的转变是机会也是挑战,我一直相信在特别的环境下能迅速磨练出了跨岗位技能和综合素质,然而一路走来也发现了本身的短板(所谓的产品思惟),并不是想提高就能够,有时候感到本身很无能。node

因而这样熬过来,暗示本身保持积极乐观的心态,平时使用一些通用的方法来提醒本身,如多问本身为何这样作,给本身定制一些小的目标等,心态好、思惟清晰、目标明确。git

虽然没有得到多大的成就,但必须看到本身在进步,除了技术进步外,关键仍是自身的思想进步,本事长在本身身上,没有人抢得走。github

 

进入正文~npm

 

上一篇文章《npm 经常使用命令详解》主要是整理了最常使用的npm命令及相关介绍,其中有提到全局安装(npm install gulp -g)和本地安装(npm install gulp),下图来自Gulp中文网入门指南,能够看出全局安装后gulp后还要进行本地安装,一开始我疑惑了?为何全局安装的gulp么,还要进行本地安装,难道不能在项目中直接调用本地安装的包?json

带着疑惑,在google找了相关文档,杂七杂八凑合起来才有了点眉目,让咱们一块儿解开nodejs全局安装和本地安装的一些疑惑,若是有讲错的地方,还请你们留意指正。gulp

本文以Windows平台上作测试,以gulp为示例作教程微信

目录

 

什么是全局安装(global)

安装位置

全局安装方式是键入命令:npm install gulp -g 或 npm install gulp --global,其中参数-g的含义是表明安装到全局环境里面,包安装在Node安装目录下的node_modules文件夹中,通常在 \Users\用户名\AppData\Roaming\ 目录下,可使用npm root -g查看全局安装目录。测试

调用方式

全局安装后能够供命令行(command line)使用,用户能够在命令行中直接运行该组件包支持的命令,以下图全局安装gulp后的cmd文件微信支付

什么是本地安装(local)

安装位置

本地安装方式是键入命令:npm install gulp 或 npm install gulp --save-dev等,其中参数--save-dev的含义是表明把你的安装包信息写入package.json文件的devDependencies字段中,包安装在指定项目的node_modules文件夹下。

调用方式

本地安装后能够直接经过require()的方式引入项目中node_modules目录下的模块,以下示例,本地安装后直接在gulpfile.js中require('gulp')。

为何全局安装后还要本地安装

仅全局安装足够吗

1.在js实例代码中,默认下node.js会在NODE_PATH和目前js所在项目下的node_modules文件夹下去寻找模块,所以,若是只是全局安装,不能直接经过require()的方式去引用模块,须要手动解决包路径的配置问题,固然你也能够复制全局安装的node_modules文件夹到项目下,还有办法能够选择将环境变量的NODE_PATH设置为C:\Program Files\nodejs。

2.对于包的更新很差管理,可能你须要为每一个包从新命名,如gulp@3.8.一、gulp@3.9.1...,为了区别不一样项目使用指定的包,保证模块之间的相互依赖(这块下面会介绍),区别每一个项目正常运行。

所以,不推荐只全局安装。

本地安装的重要性

最先的node.js/npm其实是全局的,包括如今还兼容NODE_PATH,可是不能支持全局多版本,因而nodejs团队改为本地安装的方法可能就是为了保证不一样版本包之间的相互依赖,什么意思呢,举个例子weui组件中相互依赖的包就有12个

其中依赖包的指定版本号以下,不可轻易去修改,由于不一样版本包对应依赖包的版本的功能有所差异,若是修改指定的版原本运行weui,就可能会编译出错等bug。

再举个例子:

包版本为:

A(0.0.1)依赖B(0.0.2),B(0.0.1)依赖C(0.0.3) 一段时间原做者更新后,包版本为: A(1.0.1)依赖B(1.0.0),B(1.0.0)依赖C(1.0.0)

每一次的更新可能带来不同的功能,在多人合做、发布模块到npmjs社区、上传到github给其余人使用时,保留模块的版本信息可用于下载指定的版本号显得特别重要。

本地安装可让每一个项目拥有独立的包,不受全局包的影响,方便项目的移动、复制、打包等,保证不一样版本包之间的相互依赖,这些优势是全局安装难以作到的。

另外,据node团队介绍,本地安装包对于项目的加载会更快。

有优势也少不了缺点,如每次新项目都要本地安装所依赖的包,安装包时间相对较长,一来是包太大致使下载慢;二是浪费了硬盘空间,不过如今电脑硬盘动不动就几个T,你还会在乎节省这点空间吗?

 

参考资料:

Why do we need to install gulp globally and locally?

npm 1.0: Global vs Local installation

Skip local installation of Gulp

为何 npm 要为每一个项目单独安装一遍 node_modules?

Windows系统下nodejs安装及配置

相关文章
相关标签/搜索