Nodejs全局安装和本地安装的不同之处


Posted in NodeJs onJuly 04, 2016

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

Nodejs全局安装和本地安装的不同之处

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

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

什么是全局安装(global)安装位置

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

Nodejs全局安装和本地安装的不同之处

调用方式

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

Nodejs全局安装和本地安装的不同之处

什么是本地安装(local)安装位置

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

Nodejs全局安装和本地安装的不同之处

调用方式

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

Nodejs全局安装和本地安装的不同之处

为什么全局安装后还要本地安装

仅全局安装是够吗

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

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

因此,不推荐只全局安装。

本地安装的重要性

最早的node.js/npm实际上是全局的,包括现在还兼容NODE_PATH,但是不能支持全局多版本,于是nodejs团队改成本地安装的方法可能就是为了保证不同版本包之间的相互依赖,什么意思呢,举个例子weui组件中相互依赖的包就有12个

Nodejs全局安装和本地安装的不同之处

其中依赖包的指定版本号如下,不可轻易去修改,因为不同版本包对应依赖包的版本的功能有所差别,如果修改指定的版本来运行weui,就可能会编译出错等bug。

Nodejs全局安装和本地安装的不同之处

再举个例子:

包版本为:

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,你还会在意节省这点空间吗?

以上所述是小编给大家介绍的Nodejs全局安装和本地安装的不同之处,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

NodeJs 相关文章推荐
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
深入理解nodejs中Express的中间件
May 19 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 NodeJs
NodeJs——入门必看攻略
Jun 27 #NodeJs
浅析Nodejs npm常用命令
Jun 14 #NodeJs
nodejs 的 session 简单使用
Jun 06 #NodeJs
详解nodejs与javascript中的aes加密
May 22 #NodeJs
NodeJS连接MongoDB数据库时报错的快速解决方法
May 13 #NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 #NodeJs
Nodejs学习item【入门手上】
May 05 #NodeJs
You might like
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
一个php作的文本留言本的例子(五)
2006/10/09 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
小学岗位竞聘方案
2014/01/22 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
股权收购意向书
2014/04/01 职场文书
部门年终奖分配方案
2014/05/07 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python