npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)...

2023-11-02

什么是npm

npm有两层含义。一层含义是Node的开放式模块登记和管理系统,网址为npmjs.org。另一层含义是Node默认的模块管理器,是一个命令行下的软件,用来安装和管理Node模块。
npm不需要单独安装。在安装Node的时候,会连带一起安装npm。但是,Node附带的npm可能不是最新版本,最好用下面的命令,更新到最新版本。

npm install npm@latest -g

@latest表示最新版本
-g表示全局安装

常用的npm命令

npm help 查看命令列表
npm -l 查看各个命令的简单用法
npm -v 查看npm的版本
npm config list -l 查看 npm 的配置

npm init 初始化一个package.json文件,但是有很多问答需要手动输入
npm init -y 默认直接帮我们输入好,这是一个快捷方式

npm install 下载package.json中的依赖包
npm install --save-dev === npm install webpack -D 
npm install --save === npm install webpack -S
npm info webapck 查看软件有哪些版本号
npm install webpack@4.2.2 安装软件的具体版本

npm set

npm set 用来设置环境变量
上面命令等于为npm init设置了默认值,以后执行npm init的时候,package.json的作者姓名、邮件、主页、许可证字段就会自动写入预设的值。这些信息会存放在用户主目录的 ~/.npmrc文件,使得用户不用每个项目都输入。如果某个项目有不同的设置,可以针对该项目运行npm config。

npm set init-author-name 'Your name'
npm set init-author-email 'Your email'
npm set init-author-url 'http://yourdomain.com'
npm set init-license 'MIT'

npm config

npm config get globalconfig 输出全局配置文件npmrc的路径
npm config set prefix $dir 上面的命令将指定的$dir目录,设为模块的全局安装目录。如果当前有这个目录的写权限,那么运行npm install的时候,就不再需要sudo命令授权了。

npm info

npm info命令可以查看每个模块的具体信息。比如,查看underscore模块的信息。

npm list

npm list命令以树型结构列出当前项目安装的所有模块,以及它们依赖的模块。

npm list 当前目录的依赖树状结构
npm list -global 全局目录的依赖树状结构
npm list webpack 列出单个模块例如webpack

npm install

Node模块采用npm install命令安装。每个模块可以“全局安装”,也可以“本地安装”。“全局安装”指的是将一个模块安装到系统目录中,各个项目都可以调用。一般来说,全局安装只适用于工具模块,比如eslint和gulp。“本地安装”指的是将一个模块下载到当前项目的node_modules子目录,然后只有在项目目录之中,才能调用这个模块。

# 本地安装
npm install <package name>

# 全局安装
sudo npm install -global <package name>
sudo npm install -g <package name>

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

如果你希望,所有模块都要强制重新安装,那就删除node_modules目录,重新执行npm install。

rm -rf node_modules
npm install

【安装不同版本】
install命令总是安装模块的最新版本,如果要安装模块的特定版本,可以在模块名后面加上@和版本号。

npm install sax@latest
npm install sax@0.1.1
npm install sax@">=0.1.0 <0.2.0"
npm install readable-stream --save --save-exact // 在package.json文件指定安装模块的确切版本
npm install <module-name>@1.3.1-beta.3 // 安装指定的beta版本

install命令可以使用不同参数,指定所安装的模块属于哪一种性质的依赖关系,即出现在packages.json文件的哪一项中。

–save:模块名将被添加到dependencies,可以简化为参数-S。
–save-dev: 模块名将被添加到devDependencies,可以简化为参数-D

npm install默认会安装dependencies字段和devDependencies字段中的所有模块,如果使用--production参数,可以只安装dependencies字段的模块。

npm install --production

npm update,npm uninstall

# 升级当前项目的指定模块
npm update [package name]

# 升级全局安装的模块
npm update -global [package name]

npm uninstall命令,卸载已安装的模块。

npm uninstall [package name]

# 卸载全局模块
npm uninstall [package name] -global

npm run

npm不仅可以用于模块管理,还可以用于执行脚本。package.json文件有一个scripts字段,可以用于指定脚本命令,供npm直接调用。

npm run命令会自动在环境变量$PATH添加node_modules/.bin目录,所以scripts字段里面调用命令时不用加上路径,这就避免了全局安装NPM模块。

npm run如果不加任何参数,直接运行,会列出package.json里面所有可以执行的脚本命令。

npm内置了两个命令简写,npm test等同于执行npm run test,npm start等同于执行npm run start。

{
  "name": "myproject",
  "devDependencies": {
    "jshint": "latest",
    "browserify": "latest",
    "mocha": "latest"
  },
  "scripts": {
    "lint": "jshint **.js", // 执行命令 npm run lint 则会执行冒号后面的命令
    "test": "mocha test/"
  }
}

关于这部分的内容具体可以看另外一篇文章npm scripts 脚本基础

npm bin

npm bin命令显示相对于当前目录的,Node模块的可执行脚本所在的目录(即.bin目录)。

# 项目根目录下执行
npm bin
./node_modules/.bin

npm adduser

npm adduser用于在npmjs.com注册一个用户。

npm adduser
Username: YOUR_USER_NAME
Password: YOUR_PASSWORD
Email: YOUR_EMAIL@domain.com

npm publish

npm publish用于将当前模块发布到npmjs.com。执行之前,需要向npmjs.com申请用户名。

npm owner

模块的维护者可以发布新版本。npm owner命令用于管理模块的维护者。

# 列出指定模块的维护者
npm owner ls <package name>

# 新增维护者
npm owner add <user> <package name>

# 删除维护者
npm owner rm <user> <package name>

semver规范(语义化版本)

semver 约定一个包的版本号必须包含3个数字,格式必须为 MAJOR.MINOR.PATCH, 意为 主版本号.小版本号.修订版本号.

MAJOR 对应大的版本号迭代,做了不兼容旧版的修改时要更新 MAJOR 版本号
MINOR 对应小版本迭代,发生兼容旧版API的修改或功能更新时,更新MINOR版本号
PATCH 对应修订版本号,一般针对修复 BUG 的版本号

对于包作者(发布者),npm 要求在 publish 之前,必须更新版本号。npm 提供了 npm version 工具,执行 npm version major|minor|patch 可以简单地将版本号中相应的数字加1

常用命令

npm version patch 

对于包的引用者来说,我们需要在 dependencies 中使用 semver 约定的 semver range 指定所需依赖包的版本号或版本范围。npm 提供了网站 https://semver.npmjs.com 可方便地计算所输入的表达式的匹配范围。常用的规则示例如下表:

rang 含义 例子
^2.2.1 指定的 MAJOR 版本号下, 所有更新的版本 匹配 2.2.3, 2.3.0; 不匹配 1.0.3, 3.0.1
~2.2.1 指定 MAJOR.MINOR 版本号下,所有更新的版本 匹配 2.2.3, 2.2.9 ; 不匹配 2.3.0, 2.4.5
>=2.1 版本号大于或等于 2.1.0 匹配 2.1.2, 3.1
<=2.2 版本号小于或等于 2.2 匹配 1.0.0, 2.2.1, 2.2.11
1.0.0 - 2.0.0 版本号从 1.0.0 (含) 到 2.0.0 (含) 匹配 1.0.0, 1.3.4, 2.0.0

任意两条规则,用空格连接起来,表示“与”逻辑,即两条规则的交集: 如 >=2.3.1 <=2.8.0 可以解读为: >=2.3.1 且 <=2.8.0

任意两条规则,通过 || 连接起来,表示“或”逻辑,即两条规则的并集: 如 ^2 >=2.3.1 || ^3 >3.2

[注] 除了这几种,还有如下更直观的表示版本号范围的写法:

  • * 或 x 匹配所有主版本
  • 1 或 1.x 匹配 主版本号为 1 的所有版本
  • 1.2 或 1.2.x 匹配 版本号为 1.2 开头的所有版本

[注] 在常规仅包含数字的版本号之外,semver 还允许在 MAJOR.MINOR.PATCH 后追加 - 后跟点号分隔的标签,作为预发布版本标签 - Prerelese Tags,通常被视为不稳定、不建议生产使用的版本。例如:

1.0.0-alpha
1.0.0-beta.1
1.0.0-rc.3

npm5 新增package-lock 文件

package-lock.json 的作用是锁定依赖安装结构,如果查看这个 json 的结构,会发现与 node_modules 目录的文件层级结构是一一对应的。

npm5.2新增工具npx

npx 的使用很简单,就是执行 npx <command> 即可,这里的 <command> 默认就是 ./node_modules 目录中安装的可执行脚本名。例如上面本地安装好的 webpack 包,我们可以直接使用 npx webpack 执行即可。如果使用npm webpack命令的话,会调用全局的webpack,但当全局的版本和项目的版本不一致的时候,我们还是可以使用npx来只调用项目中的webpack

最佳实践

  • 使用 npm: >=5.1 版本, 保持 package-lock.json 文件默认开启配置
  • 初始化:第一作者初始化项目时使用 npm install 安装依赖包, 默认保存 ^X.Y.Z 依赖 range 到 package.json中; 提交 package.json, package-lock.json, 不要提交 node_modules 目录
  • 初始化:项目成员首次 checkout/clone 项目代码后,执行一次 npm install 安装依赖包
  • 不要手动修改 package-lock.json
  • 升级依赖包
    • 升级小版本: 本地执行 npm update 升级到新的小版本
    • 升级大版本: 本地执行 npm install @ 升级到新的大版本
    • 也可手动修改 package.json 中版本号为要升级的版本(大于现有版本号)并指定所需的 semver, 然后执行 npm install
    • 本地验证升级后新版本无问题后,提交新的 package.json, package-lock.json 文件
  • 降级依赖包
    • 正确做法: npm install @ 验证无问题后,提交 package.json 和 package-lock.json 文件
    • 错误做法: 手动修改 package.json 中的版本号为更低版本的 semver, 这样修改并不会生效,因为再次执行 npm install 依然会安装 package-lock.json 中的锁定版本
  • 删除依赖包:
    • Plan A: npm uninstall 并提交 package.json 和 package-lock.json
    • Plan B: 把要卸载的包从 package.json 中 dependencies 字段删除, 然后执行 npm install 并提交 package.json 和 package-lock.json

任何时候有人提交了 package.json, package-lock.json 更新后,团队其他成员应在 svn update/git pull 拉取更新后执行 npm install 脚本安装更新后的依赖包

小结

通过本文学习下npm的一些常用命令以及规范,semver的版本管理规范,以及npm的一些最佳实践方式

转载于:https://www.cnblogs.com/shiyou00/p/10587276.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)... 的相关文章

随机推荐

  • 深入JVM - 实例详解invoke相关操作码

    Java虚拟机规范中有一个章节专门列出了操作码助记符 对应的链接为 Java Virtual Machine Specification Chapter 7 Opcode Mnemonics by Opcode 其中 方法调用相关的操作码为
  • 毕业设计 基于Arduino的肺活量计

    0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • 编程语言Java与c#的区别浅谈

    Java和c 都是编程的语言 它们是两个不同方向的两种语言 它们到底有什么区别呢 现在我给大家介绍一下 首先 我给大家说说他们的相同点吧 它们都是面向对象的语言 也就是说 它们都能够实现面向对象的思想 封装 继承 多态 下面给大家介绍一下它
  • NGINX源码之:listen和server_name命令与listening监听创建

    在http块的server块解析中 通过解析listen和server name命令配置 完成端口监听的初始化 虚拟主机配置关联 实现从host port到虚拟主机的映射关系 在进入解析源码之前 先来看看server块集中配置 server
  • html如何给3种渐变色,css中颜色渐变的实现(三种方式)

    本篇文章给大家带来的内容是关于css中颜色渐变的实现 三种方式 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 注意IE9及之前的版本不支持渐变 Safari要加 webkit 的前缀 Opera要加 o 的前缀 Firefo
  • explicit关键字的作用及其用法

    一 explicit作用 在C 中 explicit关键字用来修饰类的构造函数 被修饰的构造函数的类 不能发生相应的隐式类型转换 只能以显示的方式进行类型转换 这个关键字只能用在类内部的构造函数声明上 而不能用在类外部的函数定义上 它的作用
  • vue后台返回二维码展示在前端页面,复制二维码到剪贴板

    1 二维码渲染 vue请求 后端返回二维码 在请求时加上 responseType blob export function getQrCode query return request url xx method get params q
  • 单点登录CAS学习(二):使用IDEA搭建cas-overlay-5.3工程

    上一篇对于单点登陆进行了初步了解 我们做单点登录应用的时候 会有两个场景 单点登录的服务端 单点登录的客户端 指各个应用系统 从本篇开始的系列文章将分别介绍服务端的工程如何搭建 客户端如何改造以适用于单点登录 首先从服务端开始 我们往往需要
  • ElasticSearch集群管理(VMware)

    一 集群结构 ES通常以集群方式工作 这样做不仅能够提高 ES的搜索能力还可以处理大数据搜索的能力 同时也增加了系统的 容错能力及高可用 下图是ES集群结构的示意图 此处的设置为 每个主分片有两个副本 如果某个节点挂了也不怕 比如节点1挂了
  • 操作系统学习(十一)处理机调度

    一 知识总览 调度 按某种规则来决定处理这些任务的顺序 多道程序系统中 进程的数目往往多于处理机的数目 按照一定的算法从进程就绪队列中选择一个进程将处理机分配给他 以实现进程的并发执行 二 高级调度 作业调度 作业 用户在一次解题或一个事务
  • 计算机单位换算

    一 计算机容量单位 容量单位 字节 B gt 千字节 KB gt 兆字节 MB gt 吉字节 GB gt TB gt PB gt EB ZB YB NB DB等 注 Byte就是B也就是字节 KB是千字节 MB是兆 GB是千兆 TB是千千兆
  • jvisualvm监控tomcat

    1 修改Tomcat的catalina sh文件 修改tomcat的bin目录下的 catalina sh文件 搜索 JAVA OPTS 在引号中添加参数 Dcom sun management jmxremote port 10086 D
  • 设计RandomPool结构

    详情参看 程序员代码面试指南 P474 package com gxu dawnlab algorithm5 import java util HashMap 设计RandomPool结构 author junbin 2019年7月1日 p
  • 手动添加本地路由表并用Quagga+ospf通知其它路由

    文章目录 参考文章 一 路由设置 1 参数说明 2 查询设置 二 动态路由的设置 实验 参考文章 Linux下使用Quagga搭建软路由 OSPFv2学习 鳥哥的 Linux 私房菜 一 路由设置 1 参数说明 root anzye rou
  • AssetsBundle资源包的打包和加载

    如何打Assetsbundle资源包呢 这样 using UnityEditor using UnityEngine public class BuildAssetBundle
  • openmv图像识别:宝藏多颜色图形同时识别

    前言 最近参加了光电赛 校赛运气不好碰到铁板被淘汰了 emmm 我是大一学硬件的的 负责的是宝藏识别部分 好歹花了好几天学python 研究openmv写出来的代码 即使没啥技术性 我也不甘心就这么没了 发出来记录一下 目录 零 预备知识
  • 物联网【劲爆发现】免费云服务平台,AP透传,Web透传,ESP8266,Hex格式数据

    劲爆发现 免费云服务平台 AP透传 Web透传 ESP8266 Hex格式数据 安卓一键配置 今日 闲暇 发布一个免费的云服务器 供大家测试 先上图 看看如何使用吧 1 先从附件下载Esp8266固件及其下载工具 如下图 链接 http p
  • 单链表的冒泡排序

    当采用冒泡排序时 每一个元素与后一个元素比较 若这个元素小于后一个元素 则交换这两个元素的位置 外层循环n 1次 内循环n 1 i次 首先定义结构体指针stu p q tail p L 让p指向L L是首元结点 Int count 0 先循
  • 一些好的学习网址

    地址 http chs gotdotnet com quickstart 描述 本站点是微软 NET技术的快速入门网站 我们不必再安装 NET Framework中的快速入门示例程序 直接在网上查看此示例即看 名称 微软官方 NET指导站点
  • npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)...

    什么是npm npm有两层含义 一层含义是Node的开放式模块登记和管理系统 网址为npmjs org 另一层含义是Node默认的模块管理器 是一个命令行下的软件 用来安装和管理Node模块 npm不需要单独安装 在安装Node的时候 会连