npm是什么?是干什么的?
参考这篇博客:npm到底是干什么的(非教程,npm新人入)
总结来说:npm相当于maven的作用
了解了上面之后,我们再了解一下最困惑我们的有关npm的全局安装和本地安装问题
首先我们要明白这两个概念最基础的区别:
本地安装:
是指你在该(项目)目录下使用或者通过命令行进入到该(项目)目录下,使用 了npm install xxx的方法。然后在该(项目)目录下会生成一个node_modules文件夹,安装的东西就会安装(或者说下载)到这个node_modules文件夹里。可能有人又问了,为什么前面的该字后面有个括号括着项目两个字啊?搞前端的人应该都懂,这是因为nmp平时就是方便我们下载jQuery等一大堆前端框架用的,所以通常都是会下载到项目里用的(可能又有人说了,我是学后台的。老师给我们讲前端的时候都是下载好jQuery文件然后复制到项目相应的文件夹,然后引用就行了。那是后端玩前端的简单玩法。前端不比后端简单,它也是有一套完整的开发机制的。你那直接下载jQuery放到项目里引用,其实就相当于我们将jar包下回来然后放到项目里引用一样)
全局安装:
是指你在任何地方(即无论你进入的是哪一层目录),使用了npm install xxx -g或者npm install xxx –global。然后在你安装npm的目录下(注意啊,是npm这款软件的安装目录哈!通常是C:\Users\用户名\AppData\Roaming\npm)会有一个node_modules文件夹(对!这里也有一个和本地安装一样的文件夹。忘了是安装好npm就有还是执行相关npm install xxx -g命令才产生的了。哎~!这不是重点)。你执行npm install xxx -g安装的东西就会安装(或者下载)到这个node_modules文件夹里。
好了,恭喜你大概知道执行本地安装和全局安装的命令后会发生什么和他们之间的最明显的区别了。
可是又有同学问了,我听人家说,全局安装是一次执行,全局使用(也可以说成是引用,但是往往有很多人因为引用这两个字才被搞糊涂的,至少我就是。所以,我还是建议大家将它定义为使用好一点,为什么呢?接下来再说)。本地安装,只有本项目才能使用。其实这个说法是没问题的,但是恰恰是这浅显的几个字,然我们想多了。
我最上面说过,npm就相当于maven。它获取到(或者说下载回来)的东西(例如:jQuery等前端框架)就相当于Java里面的jar包(例如:springMVC等Java框架)。重点来了哈,学Java的都知道,jar包是使用某种自己不想写而别人已经写好的功能,我们选择直接引用的半成品工具或者框架。随着技术的发展,spring boot出现了。我们明白到,其实jar包不仅仅是一个半成品或者是工具。它也可以是一个完整的可运行的项目!!相应的npm获取到(或者说下载回来)的东西,有可能是一个半成品的前端框架,更恐怖的是:也可以是一个完整的项目(或者说是软件、组件)!!!!什么?还不明白?举个栗子,cnpm其实就是这样一个有完整功能的组件(或者说是软件)。cnpm有着npm相同的功能,这就是活生生的栗子啊。
好了,恭喜你,你又知道npm下载回来的东西都有啥了。接下来。我们再说回本地安装和全局安装的区别这一块。既然我们知道npm下载回来的可能是软件,甚至是我们开发中要用的软件,也有可能是前端框架。那什么时候使用本地安装,什么时候采用全局安装呢?很简单嘛,其实都可以。真的!全部使用本地安装也行,全部采用全局安装也行。只是在日常开发中还是区分一下好一点,以免发生不必要的麻烦。我个人认为,像cnpm、打包工具之类的软件类产品,就采用全局安装,这样就可以在本地任何时候使用这个工具或者软件(全局安装还有个好处上面说了嘛,一次安装,全局使用。就像配置了环境变量一样,可以在任何位置调用该软件的命令行执行命令)。像jQuery这种的前端框架,就采用本地安装,将他安装到使用它的项目目录中,这样后期提交代码和移植时,会解决很多问题:工具类的cnpm不会因为移植而让别人再下载安装(通常别人会安装好自己的),也能让前端jQuery等框架只出现再该项目中。
再说一下,要是全部采用本地安装和全局安装会怎么样?答案是一样的,全部采用了本地安装,使用打包工具是,命令行可能就要麻烦点切换到该路径下才能使用。全部采用全局安装,代码移植时,对方因为执行了你的项目,会在自己的npm路径下全局安装你项目中使用的前端框架和软件
其实前端开发还有一套打包等一系列和后端的操作,在这就不多说了。本地安装和全局安装现在明白了吗?