npm包安装与管理:深入解析命令行工具的全方位操作指南,涵盖脚本执行与包发布流程

在这里插入图片描述

npm,全称为Node Package Manager,是专为JavaScript生态系统设计的软件包管理系统,尤其与Node.js平台紧密关联。作为Node.js的默认包管理工具,npm为开发者提供了便捷的方式来安装、共享、分发和管理代码模块。

npm作为JavaScript世界不可或缺的基础设施,极大地促进了代码复用和协作。

一、npm包安装与管理

1. 安装包

  • 命令: npm install <package-name>

  • 作用: 安装指定的npm包作为项目依赖。

  • 例子:

    $ npm install express
    

    默认情况下,这会将包安装在node_modules目录下,并且如果项目中有package.json文件,还会将该包添加到dependencies字段。

  • 全局安装:

    $ npm install -g <package-name>
    

    使用 -g--global 参数进行全局安装,这样可以在系统全局范围内访问这个包,而不是仅限于当前项目。

2. 保存依赖

  • 命令: 自npm 5.0.0以后,--save--save-dev已经成为默认行为,无需显式指定。
    • npm install <package-name> 相当于 npm install <package-name> --save,将包添加到dependencies
    • npm install <package-name> --save-dev 将包添加到devDependencies,适用于开发阶段需要但生产环境中不需要的工具。

3. 更新依赖

  • 命令: npm update <package-name>
  • 作用: 更新指定包至最新版本(符合package.json中指定的版本范围)。
  • 例子:
    $ npm update express
    

4. 查看已安装包

  • 命令: npm list
  • 作用: 列出当前项目所有已安装的依赖及其版本。
  • 例子:
    $ npm list
    
  • npm list --depth=0: 只列出顶级依赖,不显示子依赖。

5. 搜索包

  • 命令: npm search <query>
  • 作用: 在npm仓库中搜索包含给定关键词的包。
  • 例子:
    $ npm search express
    

6. 清除缓存

  • 命令: npm cache clean --force(旧版)或 npm cache clean --all(新版)
  • 作用: 清除npm的本地缓存。
  • 例子:
    $ npm cache clean --force
    

7. 版本管理

  • 命令: npm version <semver>
  • 作用: 更新项目版本号(遵循语义化版本控制SemVer规则,如patchminormajor)。
  • 例子:
    $ npm version patch
    
  • npm outdated: 显示项目中过时的依赖包。

8. 卸载包

- `npm uninstall <package-name>`:卸载本地项目的一个包。
- `npm uninstall -g <package-name>`:卸载全局安装的包。

9.设置和查询配置

  • npm config set <key> <value>:设置npm配置项。
  • npm config get <key>:查询npm配置项的值。
  • npm config ls:列出所有的npm配置。

10.其他

  • npm audit:检查项目依赖是否存在已知安全漏洞。
  • npm shrinkwrapnpm lock(在npm 5+中引入package-lock.json):锁定依赖版本,确保每次安装都得到一致的结果。

二、npm镜像源设置

在国内使用npm(Node Package Manager)时,由于地理位置和网络限制,直接从npm官方源下载包可能会比较慢。为了提升下载速度和稳定性,很多国内的公司和组织提供了npm的镜像服务。以下是一些国内常用的优秀npm镜像源推荐及使用方法:

  1. 淘宝NPM镜像

    • 搜索地址:http://npm.taobao.org/

    • Registry 地址:https://registry.npm.taobao.org/

    • 使用方法:

      • 临时使用
        npm --registry=https://registry.npm.taobao.org install <package-name>
        
      • 持久使用
        npm config set registry https://registry.npm.taobao.org
        
    • 腾讯云NPM镜像
      Registry 地址:https://mirrors.cloud.tencent.com/npm/

    • 华为云NPM镜像
      Registry 地址:https://mirrors.huaweicloud.com/repository/npm/

    • 阿里云NPM镜像
      Registry 地址:https://registry.npm.alibaba.com/

  2. cnpmjs镜像

    • Registry 地址:http://r.cnpmjs.org/
    • 可以通过cnpm客户端(一个基于npm的增强版命令行工具)来使用它,首先安装cnpm:
      npm install -g cnpm --registry=https://registry.npm.taobao.org
      
      然后直接使用cnpm替代npm命令。

要检查当前使用的npm镜像源,可以运行以下命令:

npm config get registry

要恢复到官方源,只需设置回官方Registry地址:

npm config set registry https://registry.npmjs.org/

注意:由于互联网服务可能发生变化,请在使用前访问各镜像网站确认最新的使用指南和地址。同时,不同镜像的同步策略和服务状态也可能有所差异,请根据实际需求选择合适的镜像源。

三、npm脚本运行

npm(Node Package Manager)允许用户在package.json文件中定义自定义脚本,这些脚本可以通过npm run命令来执行。这一特性使得项目管理和自动化任务变得极为方便,比如构建项目、运行测试、启动开发服务器、部署应用等等。
- 命令: npm run <script-name>
- 作用: 根据package.json中的scripts字段执行预定义的脚本。
- 例子:

示例1:基本脚本命令

// package.json 文件片段
{
  "name": "my-project",
  "version": "1.0.0",
  "scripts": {
    "start": "node app.js", // 启动应用程序
    "build": "webpack --mode production", // 使用webpack进行生产环境构建
    "test": "jest", // 运行Jest测试套件
    "lint": "eslint .", // 使用ESLint检查代码规范
    "serve": "vue-cli-service serve", // Vue CLI项目启动本地开发服务器
    "format": "prettier --write '**/*.{js,jsx,json,css,md}'" // 格式化代码
  },
  // ... 其他字段
}

如何运行这些脚本?

对于上述package.json文件中的每个脚本,你可以通过如下命令来运行它们:

  • 启动应用程序:
npm run start
  • 其他命令
npm run build //构建项目
npm run test //运行测试
npm run lint //检查代码规范
npm run serve //启动本地开发服务器
npm run format //格式化代码
  • npm run会创建一个新的shell来执行指定的脚本命令,所以你可以像在shell脚本中那样使用管道(|)、重定向(>>>)、逻辑运算符(&&||)等。
  • 可以通过npm run-script <script-name>的方式来代替npm run <script-name>,但后者更为常见和简洁。
  • 有些脚本名称具有特殊含义,例如prebuildpostbuild会在build脚本前后自动执行。
  • 参数传递:若要向脚本传递参数,可以使用--分隔符,例如:npm run my-script -- --arg1 value1 --arg2 value2

示例2:传递参数和环境变量

在npm脚本中还可以传递参数和使用环境变量。
若要向脚本传递参数,可以使用–分隔符,例如:npm run my-script – --arg1 value1 --arg2 value2。

"scripts": {
  "env-test": "node script.js $npm_config_env_variable",
}

运行脚本并传入环境变量:

npm run env-test -- --env-variable=value

这里,$npm_config_env_variable将会被替换为--env-variable=value传入的值。

示例3:组合多个命令

如果你需要执行一系列命令,可以使用&&符号连接多个命令,或者使用npm-run-all等第三方包来并行或顺序执行脚本:

"scripts": {
  "deploy": "npm run build && npm run deploy-to-server",
}

在上述示例中,npm run deploy将会先执行build脚本,成功后再执行deploy-to-server脚本。

通过这种方式,npm脚本极大地增强了项目自动化能力,使得开发者能够更好地组织和执行项目生命周期中的各个步骤。

三. npm包制作发布

创建自己的npm包并成功发布、维护至npm官方网站,可以连接全球范围内的开发者、包作者与使用者,共同推动着Node.js生态的繁荣与发展。

  • 命令: npm publish
  • 作用: 将当前目录下符合npm发布要求的包发布到npm仓库。
  • 前提: 已经登录npm账户 (npm login),并且当前目录下有合法的package.jsonREADME.md等文件。

具体请查看《如何开发创建自己的npm包并成功发布、维护至npm官方网站

以上命令仅覆盖了npm部分基础和常用的功能,实际使用时还有许多其他命令可供探索,包括但不限于删除包、查看包信息、链接本地包等。建议查阅npm官方文档获取完整信息。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/527853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> quadruplets;if (nums.size() < 4) {return quadruplets;}sort(nums.begin(), nums.en…

谷歌seo自然搜索排名怎么提升快?

要想在谷歌上排名快速上升&#xff0c;关键在于运用GPC爬虫池跟高低搭配的外链组合 首先你要做的&#xff0c;就是让谷歌的蜘蛛频繁来你的网站&#xff0c;网站需要被谷歌蜘蛛频繁抓取和索引&#xff0c;那这时候GPC爬虫池就能派上用场了&#xff0c;GPC爬虫池能够帮你大幅度提…

GD32零基础教程第一节(开发环境搭建及工程模板介绍)

文章目录 前言一、MDK keil5安装二、设备支持包安装三、CH340串口驱动安装四、STLINIK驱动安装五、工程风格介绍总结 前言 本篇文章正式带大家开始学习GD32F407VET6国产单片机的学习&#xff0c;国产单片机性能强&#xff0c;而且价格也便宜&#xff0c;下面就开始带大家来介绍…

致远互联-OA 前台fileUpload.do 绕过文件上传漏洞复现

0x01 产品简介 致远互联-OA 是数字化构建企业数字化协同运营中台,面向企业各种业务场景提供一站式大数据分析解决方案的协同办公软件。 0x02 漏洞概述 致远互联-OA 接口 fileUpload.do 接口处存在文件上传漏洞,未经身份验证的远程攻击者可通过目录遍历的方式绕过上传接口限…

阿里通义千问开源 320 亿参数模型;文字和音频自动翻译成手语Hand Talk拉近人与人的距离

✨ 1: Qwen1.5-32B Qwen1.5-32B是Qwen1.5系列中性能与效率兼顾的最新语言模型&#xff0c;内存占用低&#xff0c;运行速度快。 Qwen1.5-32B是Qwen1.5语言模型系列的最新成员&#xff0c;这个模型是基于先进的技术研发的&#xff0c;旨在提供一种既高效又经济的AI语言理解和生…

Unity面经(自整)——Unity基础知识

Unity基础知识 1. Image和RawImage的区别 Image比RawImage更耗性能。Image只能使用sprite属性的图片。而RawImage什么都可以使用 2. Unity3D中的碰撞器Collider和触发器Trigger的区别 碰撞器是触发器的载体&#xff0c;而触发器是碰撞器上的一个属性。 如果IsTrigger为fal…

Maven POM元素解析

这是对Maven中使用的Maven项目描述符的引用。 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/…

列车调度

描述 火车站的列车调度铁轨的结构如下图所示。 两端分别是一条入口&#xff08;Entrance&#xff09;轨道和一条出口&#xff08;Exit&#xff09;轨道&#xff0c;它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入&#xff0c;最后从出口离开。在图中有9趟列…

C#操作MySQL从入门到精通(7)——对查询数据进行简单过滤

前言 我们在查询数据库中数据的时候,有时候需要剔除一些我们不想要的数据,这时候就需要对数据进行过滤,比如学生信息中,我只需要年龄等于18的,类似这种操作,本文就是详细介绍如何对查询的数据进行初步的过滤。 1、等于操作符 本次查询student_age 等于20的数据,使用我…

Open CASCADE学习|平面上的PCurve

曲面上的曲线PCurve&#xff0c;字面上理解即为参数曲线(Parametric Curve)。在几何建模中&#xff0c;PCurve通常被描述为附加在参数曲面之间公共边上的数据结构。从更具体的定义来看&#xff0c;当给定一个曲面方程&#xff0c;并且其参数u和v是另一个参数t的函数时&#xff…

PyCharm双击无法打开 安装新旧版本pycharm同时启动失败的解决办法

由于2019版本无法直接升级到2023版本 所以下载了两个版本的PyCharm 且两个都是专业版的 一个是2019的&#xff0c; 一个是2024新版的其中2019版本是破解版&#xff01; 然后现在想要打开2024的新版&#xff0c;发现双击无法启动&#xff0c;到文件所在位置打开也无法启动&a…

二维数组及其内存图解

二维数组 在一维数组的介绍当中曾说&#xff0c;数组中可以储存任何同类型的元素&#xff0c;那么这个元素是不是可以也是数组呢&#xff1f;答案是可以&#xff0c;即在数组之中储存数组元素。这种情况就是多维数组&#xff0c;当一个数组中的元素是数组时叫做二维数组&#x…

如何使用校园网——Win10笔记本,台式机互开热点

当我们使用校园网的时候&#xff0c;往往只能连接一个电脑端&#xff0c;但是又想两个机子同时连接WIFI怎么办呢&#xff1f; 当然&#xff0c;前提条件是你先得其中一台电脑有网络哈 1、打开想开共享热点的电脑的设置 A、点击WIN&#xff0c;再点击设置 2、点击网络和Inte…

论如何在小程序展示超链接在线网页

在工作中遇到一个需求&#xff0c;就是在小程序中展示超链接网页&#xff0c;起初我是直接使用web-view标签 <web-view src"https://www.baidu.com/"/>但是web-view只能在开发阶段手机上展示&#xff0c;一旦小程序发布线上&#xff0c;就会出现下面这种情况“…

每日OJ题_两个数组dp④_力扣44. 通配符匹配

目录 力扣44. 通配符匹配 解析代码 力扣44. 通配符匹配 44. 通配符匹配 难度 困难 给你一个输入字符串 (s) 和一个字符模式 (p) &#xff0c;请你实现一个支持 ? 和 * 匹配规则的通配符匹配&#xff1a; ? 可以匹配任何单个字符。* 可以匹配任意字符序列&#xff08;包…

如果用大模型考公,kimi、通义千问谁能考高分?

都说大模型要超越人类了&#xff0c;今天就试试让kimi和通义千问做公务员考试题目&#xff0c;谁能考高分&#xff1f; 测评结果再次让人震惊&#xff01; 问题提干&#xff1a;大小两种规格的盒装鸡蛋&#xff0c;大盒装23个&#xff0c;小盒装16个&#xff0c;采购员小王买了…

【Java集合】面试题汇总

Java 集合Java 集合概览1. List, Set, Queue, Map 四者的区别&#xff1f;2. ArrayList 和 Array&#xff08;数组&#xff09;的区别&#xff1f;3. ArrayList 和 Vector 的区别?4. Vector 和 Stack 的区别?&#xff08;了解即可&#xff09;5. ArrayList 可以添加 null 值吗…

ts中的类型简介

注意&#xff1a;尽量不要在ts中用var&#xff0c;不然后续维护代码&#xff0c;容易出现很多问题。 var定义会在全局中生效&#xff0c;而let只会在作用域中起作用。 boolean string number array tuple&#xff08;元组&#xff09; enum&#xff08;枚举&#xff09; null u…

自动驾驶中的传感器融合算法:卡尔曼滤波器和扩展卡尔曼滤波器

自动驾驶中的传感器融合算法&#xff1a;卡尔曼滤波器和扩展卡尔曼滤波器 附赠自动驾驶学习资料和量产经验&#xff1a;链接 介绍&#xff1a; 追踪静止和移动的目标是自动驾驶技术领域最为需要的核心技术之一。来源于多种传感器的信号&#xff0c;包括摄像头&#xff0c;雷达…

想进阶为 Go 语言高级开发工程师吗?那么,一定要阅读此文!

大家好&#xff0c;我是孔令飞&#xff0c;字节跳动云原生开发专家、前腾讯云原生技术专家&#xff1b;《企业级Go项目开发实战》作者&#xff0c;云原生实战营 知识星球星主&#xff1b; 我们知道&#xff0c;Go 出自名门 Google 公司&#xff0c;是一门支持并发、垃圾回收的编…