一文搞懂npm install 意义

 更新时间:2022年12月01日 10:50:25   作者:Never Yu  
我们在安装依赖包的时候,不需要过多的去纠结是使用 -S 还是 -D 呢 ?随便安装到 dependencies 或者 devDependencies 里都行,反正 npm install的时候,都会安装dependencies 和 devDependencies依赖,今天通过本文学习npm install意义,感兴趣的朋友跟随小编一起看看吧

【当我们敲 npm install 的时候会安装哪些依赖,dependencies 和 devDependencies 都会安装吗?还是只安装 dependencies ?】

【项目依赖包是放在 dependencies 和 devDependencies ?】

简单问两个问题,勾起大家对 npm install,dependencies ,devDependencies 的回忆。

下面进入正文

  • npm install 也支持直接输入 Github 代码库地址
$ npm install git://github.com/package/path.git
$ npm install git://github.com/package/path.git#0.1.0

安装之前,npm install 会先检查,node_modules 目录之中是否已经存在指定模块。如果存在,就不再重新安装了,即使远程仓库已经有了一个新版本,也是如此。

如果你希望,一个模块不管是否安装过, npm 都要强制重新安装,可以使用 -f--force 参数。

$ npm install <packageName> --force

npm install 的时候会安装哪个里面的依赖?dependencies 还是 devDependencies

npm install 默认会安装 dependencies 字段和 devDependencies 字段中的所有模块】。 如果软件包具有 package-lock 或 shrinkwrap 文件,则依赖项的安装将由此驱动,如果两个文件都存在,则 npm-shrinkwrap.json 优先。 请参阅 package-lock.jsonnpm-shrinkwrap

【ok,那么也就是说,当我们在拿到一个项目的时候,使用 npm install 是会安装 dependencies 和 devDependencies 里所有的依赖包的。】

那么是否意味着,我们在安装依赖包的时候,不需要过多的去纠结是使用 -S 还是 -D 呢 ?随便安装到 dependencies 或者 devDependencies 里都行,反正 npm install 的时候,都会安装 dependencies 和 devDependencies 里面的依赖。

其实不然!

如果使用 --production 参数,可以只安装 dependencies 字段的模块。

$ npm install --production
# 或者
$ NODE_ENV=production npm install

【所以,我们做好 dependencies 和 devDependencies 的区分的话,在使用 npm install --production 的时候,还是有区别的。】

不过,感觉这个 npm install --production 的使用场景不是很多。我好像没怎么用,可能以后会用到吧。

内心os:既然 npm install --production 我用不到,那我在安装依赖包的时候,还是随意吧,放到 dependencies 或者 devDependencies 都无所谓,反正 npm install 的时候会把 dependencies 和 devDependencies 里面的依赖包都安装下来。哈哈~~,随意使用 -S 或者 -D 咯~

错!
错!!
错!!!
这样想就错了。dependencies 和 devDependencies 还是有明显区别的。我们接着来看。

我们在安装依赖包的时候,要如何区分是安装到 dependencies 还是 devDependencies 中呢?

dependencies 依赖

这个可以说是我们 npm 核心一项内容,依赖管理,这个对象里面的内容就是我们这个项目所依赖的 js 模块包。下面这段代码表示我们依赖了 markdown-it 这个包,版本是 ^8.1.0 ,代表最小依赖版本是 8.1.0 ,如果这个包有更新,那么当我们使用 npm install 命令的时候,npm 会帮我们下载最新的包。当别人引用我们这个包的时候,包内的依赖包也会被下载下来。

"dependencies": {
    "markdown-it": "^8.1.0"
}

devDependencies 开发依赖

【在我们开发的时候会用到的一些包,只是在开发环境中需要用到,但是在别人引用我们包的时候,不会用到这些内容,放在 devDependencies 的包,在别人引用的时候不会被 npm 下载】。

"devDependencies": {
    "autoprefixer": "^6.4.0",0",
    "babel-preset-es2015": "^6.0.0",
    "babel-preset-stage-2": "^6.0.0",
    "babel-register": "^6.0.0",
    "webpack": "^1.13.2",
    "webpack-dev-middleware": "^1.8.3",
    "webpack-hot-middleware": "^2.12.2",
    "webpack-merge": "^0.14.1",
    "highlightjs": "^9.8.0"
}

当你有了一个完整的 package.json 文件的时候,就可以让人一眼看出来,这个模块的基本信息,和这个模块所需要依赖的包。我们可以通过 npm install 就可以很方便的下载好这个模块所需要的包。

结论:当你在开发一个 npm 包的时候,还是要好好管理你的 dependencies 依赖 和 devDependencies 依赖。 之前有个同事写了一个 loading 组件,发到 npm 上面去了,他跟我说简单好用,我就用了。但是我发现他这么小的一个组件,为什么包这么大。一看,原来他写这个 npm 包的时候,所有的依赖都放到 dependencies 里面了(包括 gulp,browser-asyc,压缩代码的,express…等等一些他开发时用的工具)。

相关文章

  • 详解使用PM2管理nodejs进程

    详解使用PM2管理nodejs进程

    本篇文章主要介绍了详解使用PM2管理nodejs进程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Node中的util.promisify()方法的基本使用和实现

    Node中的util.promisify()方法的基本使用和实现

    众所周知,在JS中实现异步编程主要是通过以下几种方案,回调函数,观察者模式,Generator,Promise,async / await ,今天就和大家一起聊一下在node中的一个util.promisify()这个API的基本使用和基本实现
    2023-07-07
  • Node.js 实现简单的无侵入式缓存框架的方法

    Node.js 实现简单的无侵入式缓存框架的方法

    这篇文章主要介绍了Node.js 实现简单的无侵入式缓存框架的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 切换到淘宝最新npm镜像源的全面指南(支持 Windows、macOS 和多种 Linux 发行版)

    切换到淘宝最新npm镜像源的全面指南(支持 Windows、macOS 和多种 Linux

    在开发过程中,npm 是前端开发者不可或缺的工具,但对于国内的开发者来说,npm 官方源在下载速度上存在一定的瓶颈,本文将详细介绍如何在 Windows、macOS 以及各类 Linux 发行版上切换到淘宝的 npm 镜像源,需要的朋友可以参考下
    2025-03-03
  • 浅析nodejs实现Websocket的数据接收与发送

    浅析nodejs实现Websocket的数据接收与发送

    WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术,本文给大家介绍nodejs实现websocket的数据库接收与发送,小伙伴们一起学习吧
    2015-11-11
  • 如何用node.js作为后台,读写xml文件,Node.js的文件系统的Api

    如何用node.js作为后台,读写xml文件,Node.js的文件系统的Api

    这篇文章主要介绍了如何用node.js作为后台,读写xml文件,Node.js的文件系统的Api,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Node.js中Nodemon工具的具体使用

    Node.js中Nodemon工具的具体使用

    Nodemon是一个Node.js开发工具,用于自动监控文件变化并重启服务器,本文就来介绍一下Nodemon工具的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • 如何构建一个 NodeJS 影院微服务并使用 Docker 部署

    如何构建一个 NodeJS 影院微服务并使用 Docker 部署

    微服务是一个单独的自包含单元,与其他许多单元一起构成一个大型应用程序,这篇文章主要介绍了如何构建一个NodeJS影院微服务并使用Docker部署,在这个系列中,将构建一个 NodeJS 微服务,并使用 Docker Swarm 集群进行部署,需要的朋友可以参考下
    2023-08-08
  • nodejs入门教程六:express模块用法示例

    nodejs入门教程六:express模块用法示例

    这篇文章主要介绍了nodejs入门教程之express模块用法,结合实例形式分析了express模块的功能、创建、路由相关使用技巧,需要的朋友可以参考下
    2017-04-04
  • node.js使用zlib模块进行数据压缩和解压操作示例

    node.js使用zlib模块进行数据压缩和解压操作示例

    这篇文章主要介绍了node.js使用zlib模块进行数据压缩和解压操作,结合实例形式详细分析了node.js基于zlib模块创建数据流以及压缩和解压缩等相关操作技巧,需要的朋友可以参考下
    2020-02-02

最新评论