什么是npm系列:一、npm简介
citgpt 2024-10-01 19:41 9 浏览 0 评论
npm是Node.js的包管理工具,它的诞生也极大的促进了前端的发展,在现代前端开发中都离不开npm的身影。
本文是npm系列的第一篇,知识很基础,作为一个热身文章,如果各位已经是开发熟练工了,完全可以跳过这篇。
1. 安装 npm
npm 是基于 Node.js,所以我们需要安装 Node.js,方式有两种:
- Node.js 网站
- nvm (建议) 具体文章可以搜索下
2. 使用
2.1 如何更新npm
// 查看npm版本 npm -v // 更新npm自身 npm install npm@latest -g
2.2 安装依赖
在实际使用中我们既安装本地包(项目依赖),也会安装全局包(命令行工具)。
- 如何管理本地包
可以使用下面的命令来安装一个包:
npm install <package_name>
移除包可以用指令:
npm uninstall <package_name>
在项目中安装包时默认会安装到dependencies中,我们可以通过以下参数来控制这个行为:
- -P, --save-prod: 记录在dependencies
- -D, --save-dev: 记录在devDependencies
- -O, --save-optional: 记录在optionalDependencies
- --no-save: 不会记录在dependencies
除此之外还有两个额外的参数:
- -E, --save-exact: 版本号不会按照语义化记录,会显示具体的”1.2.3”
- -B, --save-bundle: 依赖也会记录在bundleDependencies中
如需从 package.json 文件中删除依赖,需要在命令后添加参数:
npm uninstall --save lodash // 通过--save-dev安装的包,移除的时候也需指定为--save-dev将其卸载 npm uninstall --save-dev webpack
- 如何安装全局包
全局安装一般是用来安装命令行工具,诸如gulp、http-server,我们只需要在后面加上-g,比如:
npm install -g http-server
有时候我们记不清某个包,想查看所有已安装的包应该用什么命令呢:
// depth代表遍历的深度,如果没有该参数,会把所有包的依赖也显示 npm list -g --depth 0
2.3 package-lock.json
项目中安装依赖后在自动生成package-lock.json文件,里面包含安装的依赖信息,主要是用来锁定依赖版本,确保团队之间安装依赖时不会出现差异。
3. dependencies
前面提到dependencies的概念,那在npm中都有哪些依赖呢?
- dependencies 生产环境
- devDependencies 开发环境
- optionalDependencies 可选依赖
- peerDependencies 前置依赖
- bundleDependencies 待打包依赖(没找到具体名称,可以看下后面的具体介绍)
3.1 dependencies && devDependencies
这两个是我们使用的最多的,也是最需要注意的。
假设我们有一个插件magic-lint,它的作用是在提交commit时检查以及格式化代码,那么里面至少有prettier插件用来美化代码,我们需要确保其他用户安装magic-lint之后能正常使用,那就要把prettier列为dependencies。
另外我们在开发magic-lint过程是属于开发环境,我们会需要jest来测试,普通用户安装时是不需要jest,我们把jest列为devDependencies后就可以避免这样的情况。
如果添加--production标记,或者环境变量NODE_ENV被设置为production, npm就不会安装devDependencies中的模块。
3.2 peerDependencies
那什么时候用peerDependencies呢?
假设我们有一个webpack-plugin-god插件,它只是webpack的插件,并不依赖webpack,所以在dependencies或devDependencies中不会写明webpack,但事实上它又是针对特定的webpack版本开发,这个时候我们就可以把webpack写入peerDependencies中。
3.3 optionalDependencies
如果有一个包属于可与有无的,我们就可以把它归为optionalDependencies
写代码时我们可以这样使用可选包:
try { var foo = require('foo') var fooVersion = require('foo/package.json').version } catch (er) { foo = null } if ( notGoodFooVersion(fooVersion) ) { foo = null } // .. then later in your program .. if (foo) { foo.doFooThings() }
3.4 bundleDependencies
假设我们有一个package.json:
{ "name": "awesome-web-framework", "version": "1.0.0", "bundledDependencies": [ "renderized", "super-streams" ] }
通过npm pack命令我们可以得到文件awesome-web-framework-1.0.0.tgz,里面会包含renderized和super-streams两个依赖。
在项目中执行npm install awesome-web-framework-1.0.0.tgz,结构也会变为:
├── node_modules ├── awesome-web-framework │ └── renderized │ └── super-streams └── xxx
4. 预告
下一篇将讲解 npm install,看了之后,希望能够让你惊叹一下:“哇~ 原来还可以这样”,我就心满意足了。
系列汇总
- 什么是npm系列:一、npm简介
- 什么是npm系列:二、install 的十八般武艺
- to be continued
- 上一篇:node和npm版本更新
- 下一篇:npm常用命令操作
相关推荐
- js中arguments详解
-
一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...
- firewall-cmd 常用命令
-
目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...
- epel-release 是什么
-
EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...
- FullGC详解 什么是 JVM 的 GC
-
前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...
-
2024-10-26 08:50 citgpt
- 跨域(CrossOrigin)
-
1.介绍 1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。 通俗讲...
- 微服务架构和分布式架构的区别
-
1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...
- 深入理解与应用CSS clip-path 属性
-
clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...
-
2024-10-25 11:51 citgpt
- Request.ServerVariables 大全
-
Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...
- python操作Kafka
-
目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...
- Runtime.getRuntime().exec详解
-
Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...
- promise.all详解 promise.all是干什么的
-
promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...
-
2024-10-24 16:21 citgpt
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracleclient (56)
- springbatch (59)
- oracle恢复数据 (56)
- 简单工厂模式 (68)
- 函数指针 (72)
- fill_parent (135)
- java配置环境变量 (140)
- linux文件系统 (56)
- 计算机操作系统教程 (60)
- 静态ip (63)
- notifyicon (55)
- 线程同步 (58)
- xcode 4 5 (60)
- 调试器 (60)
- c0000005 (63)
- html代码大全 (61)
- header utf 8 (61)
- 多线程多进程 (65)
- require_once (60)
- 百度网盘下载速度慢破解方法 (72)
- 谷歌浏览器免费入口 (72)
- npm list (64)
- 网站打开速度检测 (59)
- 网站建设流程图 (58)
- this关键字 (67)