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与Mysql的交互示例代码
Aug 18 NodeJs
我的NodeJs学习小结(一)
Jul 06 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
async/await与promise(nodejs中的异步操作问题)
Mar 03 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
Nodejs中的JWT和Session的使用
Aug 21 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
Jan 04 NodeJs
nodejs制作小爬虫功能示例
Feb 24 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下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
深入解析Python中的urllib2模块
2015/11/13 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
Python PO设计模式的具体使用
2019/08/16 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
毕业生个人投资创业计划书
2014/01/04 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
写景作文评语集锦
2014/12/25 职场文书
语文复习计划
2015/01/19 职场文书
暑期家教宣传单
2015/07/14 职场文书
提档介绍信范文
2015/10/22 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers