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入门详解(多篇文章结合)
Mar 07 NodeJs
基于NodeJS的前后端分离的思考与实践(二)模版探索
Sep 26 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
Mar 28 NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
NodeJS实现同步的方法
Mar 02 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 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
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
Python算法应用实战之队列详解
2017/02/04 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
Python tkinter和exe打包的方法
2020/02/05 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
写给学生的新学期寄语
2014/01/18 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
党员民主评议个人总结
2014/10/20 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
解除处分决定书
2015/06/25 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
基于JavaScript实现省市联动效果
2021/06/22 Javascript
zabbix配置nginx监控的实现
2022/05/25 Servers