百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

npm简介

liuian 2025-02-07 18:21 22 浏览

1.1 npm的用途

NPM(node package manager),主要功能就是管理node包。

包括:安装、卸载、更新、查看、搜索、发布等。npm详细记录了每个包的信息(作者、版本、依赖、授权信息等)。是一个统一的代码包管理平台,解决了当项目依赖的代码越来越多,所维护的代码日益增加,所以需要以组件化的方式统一管理可复用的模块或工具。项目的结构清晰,减少模块的耦合低,增加开发的效率。需要变更的功能不用去维护所有项目的代码,只需维护 npm 上的版本,更新到每个项目,然后解决兼容并通过测试。

1.1.2 npm的安装

Node 已经内置了npm,所以只要安装 node 就自带了 npm

可以从Node官网安装,安装完后在控制台输入:

// 查看 node 版本
node -v
// 查看 npm 版本
npm -v

1.1.3 npm的更新

更新npm :

npm install -g npm

更新node版本:

  1. mac、linux:
// 先清除npm缓存:
npm cache clean -f


// 然后安装n模块:
npm install -g n


// 升级node.js到最新稳定版:
n stable


// 如果是mac升级出现错误,在命令前面加sudo
  1. windows:

windows 更新 node 比较简单,下载官方版本覆盖更新就行

1.2 npm的用法

1.2.1 安装包

// 本地安装
npm install <模块名称>
// 全局安装
npm install <模块名称> -g


// -dev的简写,配合package,安装到devDependencies中,推荐使用
npm install <模块名称> -D


// 同时安装多个包,模块名中间空格就行
npm install <模块名称> <模块名称> <模块名称> -D

全局安装和本地安装的区别主要是路径不同:

本地安装

  • 安装包是放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
  • 可以通过 require() 或 import from 来引入本地安装的包。

全局安装

  • 安装包是放在 /usr/local 下或者你 node 的安装目录。
  • 可以直接在命令行里使用。

npm install 安装包时发生了什么?

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

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

npm install <模块名称> --force

npm 如何安装指定版本的包?

// npm 5.0.0以后的版本 --save 可以省略
npm install jquery@3.0.0 --save

1.2.2 查看安装包的信息

// 查看所有全局安装的模块
npm list -g
// 查看某个模块的版本号
npm list <模块名称>

模块目录下的 package.json 文件中包含了该模块的详细信息,用于定义包的属性:

  • name - 包名。
  • version - 包的版本号。
  • description - 包的描述。
  • homepage - 包的官网 url 。
  • author - 包的作者姓名。
  • contributors - 包的其他贡献者姓名。
  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在node_module 目录下。
  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
  • main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
  • keywords - 关键字

1.2.3 更新包版本

npm update <模块名称>

1.2.4 卸载包

npm uninstall <模块名称>

1.3package.json

1.3.1 npm依赖包版本号~和^和*的区别

  • ~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
  • ^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
  • * 这意味着安装最新版本的依赖包
"dependencies": {
  "axios": "^0.18.0",
  "xxx-ba": "*",
  "xxx-filter": "*",
  "xxx-util": "*",
  "vant": "^1.6.17",
  "vue": "^2.5.2",
  "vue-router": "^3.0.1",
  "vuex": "^3.1.0",
  "weixin-js-sdk": "^1.4.0-test"
},
devDependencies": {
    "ali-oss": "^6.0.1",
    "autoprefixer": "7.2.3",
    "babel-core": "6.26.0"
}

1.3.2 dependencies和devDependencies的区别

  • dependencies是运行时依赖,其中的包在可运行环境才会使用
  • devDependencies是开发时依赖,其中的包在开发环境才会使用

正如 1.2.1 中讲到的 --save 和 --save-dev,--save 是将包安装在dependencies下,--save-dev则是在devDependencies下。

什么情况需要devDependencies?

  • dependencies,在可运行环境,只需要我们能正常运行该项目所需要的模块, 比如vue,vue-router,express等等这些,项目没有这些依赖会出错
  • devDependencies,在开发环境中我们所做的单元测试,webpack,gulp,supervisor等这些工具,都只是在开发阶段需要,一旦项目投入使用便不再需要。

1.4 npm的缺陷

  1. 更新速度慢
  2. 拉取的包可能版本不同(.lock)
  3. 本地包支持比较落后(私有仓库)

解决方案

以上有些问题也不是不能解决,有一些另辟蹊径的方法可以避免。

类比yarn

安装速度:yarn 是同步执行所有包的下载,npm 是队列下载。所以随着安装包数量增多,yarn 的安装速度相对会更快。

相关推荐

python入门到脱坑函数—定义函数_如何定义函数python

Python函数定义:从入门到精通一、函数的基本概念函数是组织好的、可重复使用的代码块,用于执行特定任务。在Python中,函数可以提高代码的模块性和重复利用率。二、定义函数的基本语法def函数名(...

javascript函数的call、apply和bind的原理及作用详解

javascript函数的call、apply和bind本质是用来实现继承的,专业点说法就是改变函数体内部this的指向,当一个对象没有某个功能时,就可以用这3个来从有相关功能的对象里借用过来...

JS中 call()、apply()、bind() 的用法

其实是一个很简单的东西,认真看十分钟就从一脸懵B到完全理解!先看明白下面:例1obj.objAge;//17obj.myFun()//小张年龄undefined例2shows(...

Pandas每日函数学习之apply函数_apply函数python

apply函数是Pandas中的一个非常强大的工具,它允许你对DataFrame或Series中的数据应用一个函数,可以是自定义的函数,也可以是内置的函数。apply可以作用于DataF...

Win10搜索不习惯 换个设定就好了_window10搜索用不了怎么办

Windows10的搜索功能是真的方便,这点用惯了Windows10的小伙伴应该都知道,不过它有个小问题,就是Windows10虽然会自动联网搜索,但默认使用微软自家的Bing搜索引擎和Edge...

面试秘籍:call、bind、apply的区别,面试官为什么总爱问这三位?

引言你有没有发现,每次JavaScript面试,面试官总爱问你call、bind和apply的区别?好像这三个方法成了通关密码,掌握了它们,就能顺利过关。其实不难理解,面试官问这些问题,不...

记住这8招,帮你掌握“追拍“摄影技法—摄影早自习第422日

杨海英同学提问:请问叶梓老师,我练习追拍时,总也不能把运动的人物拍清晰,速度一般掌握在1/40-1/60,请问您如何把追拍拍的清晰?这跟不同的运动形式有关系吗?请您给讲讲要点,谢谢您!摄影:Damia...

[Sony] 有点残酷的测试A7RII PK FS7

都是好机!手中利器!主要是最近天天研究fs5,想知道fs5与a7rii后期匹配问题,苦等朋友的fs5月底到货,于是先拿手里现有的fs7小测一下,十九八九也能看到fs5的影子,另外也了解一下fs5k标配...

AndroidStudio_Android使用OkHttp发起Http请求

这个okHttp的使用,其实网络上有很多的案例的,但是,如果以前没用过,copy别人的直接用的话,可以发现要么导包导不进来,要么,人家给的代码也不完整,这里自己整理一下.1.引入OkHttp的jar...

ESL-通过事件控制FreeSWITCH_es事务控制

通过事件提供的最底层控制机制,允许我们有效地利用工具箱,适时选择使用其中的单个工具。FreeSWITCH是一个核心交换与混合矩阵,它周围有几十个模块提供各种功能特性。我们完全控制了所有的即时信息,这些...

【调试】perf和火焰图_perf生成火焰图

简介perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些...

文本检索控件也玩安卓?dtSearch Engine发布Android测试版

dtSearchEngineforLinux(原生64-bit/32-bitC++和JavaAPIs)和dtSearchEngineforWin&.NET(原生64-bi...

网站后台莫名增加N个管理员,记一次SQL注入攻击

网站没流量,但却经常被SQL注入光顾。最近,网站真的很奇怪,网站后台不光莫名多了很多“管理员”,所有的Wordpres插件还会被自动暂停,导致一些插件支持的页面,如WooCommerce无法正常访问、...

多元回归树分析Multivariate Regression Trees,MRT

多元回归树(MultivariateRegressionTrees,MRT)是单元回归树的拓展,是一种对一系列连续型变量递归划分成多个类群的聚类方法,是在决策树(decision-trees)基础...

JMETER性能测试_JMETER性能测试指标

jmeter为性能测试提供了一下特色:jmeter可以对测试静态资源(例如js、html等)以及动态资源(例如php、jsp、ajax等等)进行性能测试jmeter可以挖掘出系统最大能处...