赞
踩
在我们通过模块化的方式将代码划分成一个个小的结构后,在以后的开发中我们就可以通过模块化的方式来封装自己的代码,并且封装成一个工具,这个工具我们可以让同事通过导入的方式来使用,甚至你可以分享给世界各地的程序员来使用。
这时候,有的人会考虑一个问题,如果我们分享给世界上所有的程序员使用,有哪些方式呢?
显然,上面的方式是有效的,但是这种传统的方式非常麻烦,并且容易出错;
显然,通过第二种方式我们可以更好的管理自己的工具包,其他人也可以更好的使用我们的工具包。
这个我们都不陌生,用得最多的也就是这个:
如何下载npm工具呢?
npm管理的包可以在哪里查看、搜索呢?
npm管理的包存放在哪里呢?
那么对于一个项目来说,我们如何使用npm来管理这么多包呢?
这个配置文件就是package.json
那么这个配置文件如何得到呢?
必须填写的属性:name、version
private属性:
main属性:
scripts属性
dependencies属性
devDependencies属性
peerDependencies属性
engines属性
browserslist属性
我们会发现安装的依赖版本出现:^2.0.3或~2.0.3,这是什么意思呢?
npm的包通常需要遵从semver版本规范:
semver版本规范是X.Y.Z:
我们这里解释一下 ^和~的区别:
安装npm包分两种情况:
npm install webpack -g
但是很多人对全局安装有一些误会:
项目安装会在当前目录下生产一个 node_modules 文件夹,我们之前讲解require查找顺序时有讲解过这个包在什么情况下被查找;
局部安装分为开发时依赖和生产时依赖:
# 安装开发和生产依赖
npm install axios
npm i axios
# 开发依赖
npm install webpack --save-dev
npm install webpack -D
npm i webpack –D # 根据package.json中的依赖包
npm install
大家之前应该已经会了 npm install ,但是你是否思考过它的内部原理呢?
执行 npm install它背后帮助我们完成了什么操作?
我们会发现还有一个成为package-lock.json的文件,它的作用是什么?
从npm5开始,npm支持缓存策略(来自yarn的压力),缓存有什么作用呢?
这是一幅画出的根据 npm install 的原理图:
npm install会检测是有package-lock.json文件:
没有lock文件
分析依赖关系,这是因为我们可能包会依赖其他的包,并且多个包之间会产生相同依赖的情况;
从registry仓库中下载压缩包(如果我们设置了镜像,那么会从镜像服务器下载压缩包);
获取到压缩包后会对压缩包进行缓存(从npm5开始有的);
将压缩包解压到项目的node_modules文件夹中(前面我们讲过,require的查找顺序会在该包下面查找)
有lock文件
检测lock中包的版本是否和package.json中一致(会按照semver版本规范检测);
不一致,那么会重新构建依赖关系,直接会走顶层的流程;
一致的情况下,会去优先查找缓存
没有找到,会从registry仓库下载,直接走顶层流程;
查找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中;
package-lock.json文件解析:
另一个node包管理工具yarn:
由于一些特殊的原因,某些情况下我们没办法很好的从 https://registry.npmjs.org下载下来一些需要的包。
查看npm镜像:npm config get registry
我们可以直接设置npm的镜像:npm config set registry
但是对于大多数人来说(比如我),并不希望将npm镜像修改了:
这个时候,我们可以使用cnpm,并且将cnpm设置为淘宝的镜像:
npx是npm5.2之后自带的一个命令。
npx的作用非常多,但是比较常见的是使用它来调用项目中的某个模块的指令。
我们以webpack为例:
全局安装的是webpack5.1.3
项目安装的是webpack3.6.0
如果我在终端执行 webpack --version使用的是哪一个命令呢?
显示结果会是 webpack 5.1.3,事实上使用的是全局的,为什么呢?
原因非常简单,在当前目录下找不到webpack时,就会去全局找,并且执行命令;
如何解决这个问题呢?
那么如何使用项目(局部)的webpack,常见的是一下几种方式:
注册npm账号:
在命令行登录:npm login
修改package.json
发布到npm registry上
更新仓库:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。