当前位置: 首页 > news >正文

npm局部安装和全局安装文件的区别

1.全局安装往往是安装一个工具,他不是安装在一个文件夹下,而是安装在某个全局环境下,如目前我的安装路径是:

C:\Users\lemon\AppData\Roaming\npm\node_modules
在这里,我们可以看到所有全局安装的工具,如babel-cli、vue-cli等等。

全局安装在命令行中的任何地方都是可以直接调用的。因为安装之后,我们可以看到如下所示:
这里写图片描述
这里是全局安装了的babel和webpack,可以看到在根目录下都有cmd后缀的文件,通过这些文件,我们就可以直接在命令行中使用了。 如使用 babel –version、 vue –version等等都是有效的,且不管你是在哪个目录文件下运行的。

2.但是局部安装并不是这样,往往是在一个项目中安装之后装入 ./node_nodules 下面, 然后在项目中,我们可以使用 require 等方式引入。这样的局限在于,只能是在本项目中使用,而webpack和babel这样的工具可以在各种情况、各种项目中使用。引用方式如下:

var gulp = require('gulp');
var less = require('gulp-less');

引入之后我们保存到了gulp和less中,这样,我们就可以继续使用他们了。

3.本地安装一般是 npm install webpack或者npm install webpack –save 或者 npm install webpack –save-dev等等,他们都是全局安装,区别仅在于是否将依赖存入dependencies以及devdependencies文件中去。

4**.为什么已经全局安装了,还需要本地安装呢?**

  (1)、仅仅是全局安装够用吗?

  通常情况下的引入模块是分为两种来寻找的,一种就是全局模块,通过NODE_PATH下去寻找;还有一种就是通过./node_modules去寻找。 如果在项目中,我们希望使用require来表现这种明显的依赖关系,那么我们就必须使用安装来进行require,当然也是可以将全局安装的文件复制过来,但是这是非常麻烦的。 或者是使用..、.、/等这种相对或者绝对的方式来引入,这些无疑都是比较麻烦的,所以本地安装不够用。

  另外,我们也许在不同的项目中所需要的模块的版本是不同的,或者可能对某些模块进行重新命名,这就导致一个项目的重命名影响全局,这是不划算的。

  (2)、本地安装的重要性。

  因为我们需要的包可能有十个,他们之间相互依赖的,如果我们使用全局包,那么每次包的升级、更新等就会影响你的多个项目,那么依赖关系就会被破坏,所以使用本地安装有利于不同项目之间的独立性。

相关文章:

  • querySelector操作dom的用法
  • webpack打包文件出错
  • npm中的--save-dev与--save的区别
  • vue-router路由导航钩子
  • javascript本地上传并解析excel文件
  • echarts柱状图的x轴文字纵向显示
  • ajax实现跨域请求的几种方式--前端
  • css3-单位px与vw,rem的区别
  • openlayers4通过拖动滑动条设置图层颜色透明度
  • openlayers4判断一个点是否在闭合图形的内部
  • 常见电脑屏幕分辨率
  • css3更改默认滚动条样式-webkit-scrollbar
  • GIS开发-天地图按照地名搜索定位
  • css3中的伪类before和after常见用法
  • openlayers4获取一个图形的边界
  • python3.6+scrapy+mysql 爬虫实战
  • [ JavaScript ] 数据结构与算法 —— 链表
  • __proto__ 和 prototype的关系
  • 【知识碎片】第三方登录弹窗效果
  • C++类中的特殊成员函数
  • DataBase in Android
  • docker-consul
  • exports和module.exports
  • JavaScript学习总结——原型
  • PHP的Ev教程三(Periodic watcher)
  • storm drpc实例
  • vue中实现单选
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 模型微调
  • 判断客户端类型,Android,iOS,PC
  • 深度学习入门:10门免费线上课程推荐
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信开源mars源码分析1—上层samples分析
  • 转载:[译] 内容加速黑科技趣谈
  • 整理一些计算机基础知识!
  • #define与typedef区别
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)vue-router+UI组件库
  • (三)Honghu Cloud云架构一定时调度平台
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .apk文件,IIS不支持下载解决
  • .equals()到底是什么意思?
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET 中的轻量级线程安全
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • ::
  • :not(:first-child)和:not(:last-child)的用法
  • ??eclipse的安装配置问题!??
  • [AIGC codze] Kafka 的 rebalance 机制
  • [Android] Amazon 的 android 音视频开发文档
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [AutoSAR 存储] 汽车智能座舱的存储需求