Node.js 依赖管理(一)—区分dependencies和devDependencies

原文链接:https://www.novenblog.xin/detail/?id=65

本文拜读百度@小蘑菇哥哥的Node.js 中的依赖管理,正文从这里开始~

nodejs 中总共有 5 种依赖:

  • 1、dependencies
  • 2、devDependencies (常用)
  • 3、peerDependencies (不太常用)
  • 4、bundledDependencies (我之前没用过)
  • 5、optionalDependencies (我之前没用过)

本文主要是记录dependencies和devDependencies相关用途与区别。

首先是一张图, 简单表示两者的区别

dependencies - 开发及运行时均需要的依赖

安装方式

npm install xxx -S   或   npm i xxx --save

i和install功能一致,此安装命令会将依赖项自动添加到package.json中的dependencies一项下。

  • 如果直接只写一个包的名字,则安装当前 npm registry 中这个包的最新版本;
  • 如果要指定版本的,可以把版本号写在包名后面,例如 npm i [email protected] —save。

注意:在npm 5.x 开始可以省略 —save,即如果执行 npm install xxx,npm 一样会把包的依赖添加到 package.json 中去。要关闭这个功能,可以使用 npm config set save false。

devDependencies - 只在开发时需要的依赖

顾名思义,也就是在线上运行环境下是不需要这些依赖的,比如webpack打包工具。

安装方式

npm install xxx -D   或   npm i xxx --save--dev

为什么需要devDependencies?

最终目的是为了减少 node_modules 目录的大小以及 npm install 花费的时间。

因为很多没有理解dependencies和devDependencies区别的nodeJs使用者,在安装一个依赖项的时候,往往会选择不使用--save或-S,这样会导致dependencies依赖性太多,在开发过程中影响不大,但是在部署到线上服务器后,因为线上生产环境只打包dependencies中的依赖,会由于dependencies导致项目依赖过多,项目文件过大,浪费服务器资源等一系列问题。

另外一个问题是,npm 的依赖是嵌套的,所以可能看上去 package.json 中只有几个依赖,但实际上它又扩散到 N 个,而 N 个又扩散到 N 平方个,一层层扩散出去,可谓子子孙孙无穷尽也。如果能够尽量减少不使用的依赖,那么就能够节省线上机器的硬盘资源,也可以节省部署上线的时间

在实际开发中,大概有这么几类可以归为开发依赖:

构建工具

现在比较热门的是 webpack 和 rollup,以往还有 grunt, gulp 等等。这些构建工具会生成生产环境的代码,之后在线上使用时就直接使用这些压缩过的代码。所以这类构建工具是属于开发依赖的。

像 webpack 还分为代码方式使用(webpack)和命令行方式使用 (webpack-cli),这些都是开发依赖。另外它们可能还会提供一些内置的常用插件,如 xxx-webpack-plugin,这些也都算开发依赖。

预处理器

这里指的是对源代码进行一定的处理,生成最终代码的工具。比较典型的有 CSS 中的 less, stylus, sass, scss 等等,以及 JS 中的 coffee-script, babel 等等。它们做的事情虽然各有不同,但原理是一致的。

以 babel 为例,常用的有两种使用方式。其一是内嵌在 webpack 或者 rollup 等构件工具中,一般以 loader 或者 plugin 的形式出现,例如 babel-loader。其二是单独使用(小项目较多),例如 babel-cli。babel 还额外有自己的插件体系,例如 xxx-babel-plugin。类似地,less 也有与之对应的 less-loader 和 lessc。这些都算作开发依赖。

在 babel 中还有一个注意点,那就是 babel-runtime 是 dependencies 而不是 devDependencies。具体分析我在之前的 babel 文章中提过,就不再重复了。

测试工具

严格来说,测试和开发并不是一个过程。但它们同属于“线上状态不需要使用的依赖”,因此也就归入开发依赖了。常用的如 chai, e2e, karma, coveralls 等等都在此列。

真的是开发才用的依赖包

最后一类比较杂,很难用一个大类囊括起来,总之就是开发时需要使用的,而实际上线时要么是已经打包成最终代码了,要么就是不需要使用了。比如 webpack-dev-server 支持开发热加载,线上是不用的;babel-register 因为性能原因也不能用在线上。其他还可能和具体业务相关,就看各位开发者自己识别了。

下面是其他相关文章推荐:

原文地址:https://www.cnblogs.com/luowen075/p/10361211.html

时间: 2024-12-28 20:33:51

Node.js 依赖管理(一)—区分dependencies和devDependencies的相关文章

Node.js包管理器Yarn的入门介绍与安装

FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱虽然是个半桶水的咸鱼前端,不过也得跟上 Javascript 这股潮 (hong) 流 (huang) 的脚步,所以便有了下面这篇文章.大概的浅尝了一下这个自称是又快又可信赖又安全的包管理,所以写的内容不会很详细,更多的可能只是针对这个全新的包管理与 npm 的不同之处来对比.也可能有些地方写得不对

node.js教程基础:node.js包管理器

Node.js 包管理器 Node程序包管理器提供了两个主要功能: 1) 它提供了可在search.nodejs.org上搜索的node.js软件包/模块的在线存储库. 2) 它还提供了命令行实用程序,用于安装Node.js软件包,执行版本管理和Node.js软件包的依赖关系管理. 在v0.6.3之后的版本中,npm与Node.js可安装程序捆绑在一起. 您可以通过打开Node.js命令提示符并键入以下命令来检查版本: npm version 使用npm安装模块 以下是安装任何Node.js模块

【转】如何使用NPM来管理你的Node.js依赖

npm 是 Node.js 的模块依赖管理工具.作为开发者使用的工具,主要解决开发 Node.js 时会遇到的问题.如同 RubyGems 对于 Ruby 开发者和 Maven 对于 Java 开发者的重要性,npm 对与 Node.js 的开发者和社区的重要性不言而喻.本文包括五点:package.json .npm 的配置.npm install 命令.npm link 命令和其它 npm 命令. package.json npm命令运行时会读取当前目录的 package.json 文件和解

9.Node.js 包管理器npm

npm 是 Node.js  官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站. $ npm install express 包的发布 , 创建符合 npm  规范的 package.json  文件 $ npm init 输入命令后,会生成package.json文件 package name: (byvoidmodule) alan version: (1.0.0)

Node.js进程管理器PM2浅析

作者:zhanhailiang 日期:2014-11-02 PM2是Node.js应用程序的进程管理管理,目前已在生产环境被普遍使用,提供以下特性: Transitional state of apps Process listing Automatic restart process based on memory Monitoring CPU/Memory usage Logs management Clustering Watch & Restart Reloading without d

Node.js进程管理之Process模块

在前面Node.js事件运行机制也有提到,Node.js应用在单个线程运行,但是现在大部分服务器都是多处理器,为了方便使用多个进程,Node.js提供了3个模块.Process模块提供了访问正在运行的进程.child_process模块可以创建子进程,并与他们通信.cluster模块提供了实现共享相同端口的集群服务能力,允许多个请求同时处理. 一.Process模块是一个无须使用require()就可以从node.js应用程序进行访问的全局对象. 二.进程I/O管道 Process为进程stdi

Node.js异步管理工具Async

async.map(['file1','file2','file3'], fs.stat, function(err, results){ // results is now an array of stats for each file }); Async 是一个为 Node.js 设计的(也可以直接在浏览器中使用)工具模块,它提供了直接而强大的 JavaScript 异步功能. Async 提供了大约20个函数,包括 map, reduce, filter, forEach 等等, 也有常用

js依赖管理之bower

twitter 出品的包管理工具- bower:基于nodejs模块化思想:致力于将客户端功能模块化及管理各个模块之间的联系. 一.安装方法 bower依赖于node.npm及git(需要从git仓库上获取一些代码包),在node及npm环境下npm install bower -g 二.操作 bower install 安装bower.json(使用bower init命令创建一个bower.json文件)中所写的依赖模块: 安装某一模块时使用bower install <package>

Node.js包管理器:

当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require获得,因为require不会搜索/usr/local/lib/node_modules/ 创建全局链接:npm link (windows不支持npm link) 它的功能是在本地包和全局包之间创建符号链接,例如,我们已经通过npm install -g express 安装了express ,这时在工程 目录下,运行命令: