npm package与package-lock

最近做的项目,因为是用公司平台的组件,依赖比较多,开发过程中以及发版过程中都遇到了些问题,修改了组件的版本,但是未生效等问题,特让人头痛,之前也没学习过npm的相关知识,就只是会使用npm install,现在系统学习一下。

在这推荐一篇文章,超级棒前端工程化(5):你所需要的npm知识储备都在这了

NPM是随同NodeJS一起安装的包管理工具

查看版本:

npm -v

更新到最新版:

npm install npm@latest -g

安装包:

npm install
npm install --save-dev

执行install之后,会在当前的目录下创建一个 node_modules 的目录,存在的话,node_modules里会生成该包文件,package.json文件里dependencies下会有该包的最新引用,属于生产环境所需,也就是线上。

使用--save-dev安装,会安装到devDependencies中,这种依赖只在项目开发时所需要,即其中的依赖项不应该属于线上代码的一部分。比如构建工具webpack、gulp,预处理器babel-loader、scss-loader,测试工具e2e、chai等,这些都是辅助开发的工具包,无须在生产环境使用。

千万别以为只有在dependencies中的模块才会被一起打包,而在devDependencies中的不会!模块能否被打包,取决于项目里是否被引入了该模块!
在业务项目中dependencies和devDependencies没有什么本质区别,只是单纯的一个规范作用, 在执行npm i时两个依赖下的模块都会被下载; 而在发布npm包的时候,包中的dependencies依赖项在安装该包的时候会被一起下载devDependencies依赖项则不会

依赖包版本号

包版本前面有小尖括号^,在推荐的作者的文章里有详细介绍,兼容更新的版本号,在npm install时,会自动更新到最新版,当然,是主版本下的最新版【一个npm依赖包的版本格式一般为:主版本号.次版本号.修订号】,不使用小尖括号属于精确版本号,一般上线的时候,最好固定版本号。
命名规范请参考:语义化版本 2.0.0
npm package与package-lock_第1张图片
package-lock.json文件

从npm 5.x开始,项目中采用package-lock.json的方式来锁定依赖的方式来排除自动升级问题,原则上不允许删除以及不允许放入到.gitignore与.npmignore中。

为什么会有lock呢?“锁定依赖”。小王做一个项目,里边用到了node-sass,package.json文件里会有引用:“node-sass”: “^4.9.3”,假设4.9.3是最新版,发版之后,node-sass更新到4.9.4,这时,小张需要修改小王的项目,拉取代码,install,这时,小张拉取的项目的node-sass的版本会自动更新到大版本下的最新版4.9.4,可能这个版本会影响我们之前的功能,就有问题了。这时,lock文件就出现了,npm 5以上install都是走的lock文件版本,只要不是手动更新组件版本,都是不会自动更新依赖的,这就保证了应用程序依赖之间的关系是一致的,兼容的。

更新版本

npm install 组件@version

“npm install 组件” 也是可以更新package和lock两个文件的,直接修改package里的版本 然后install,node_modules里组件不会更新,还是会安装lock文件里的版本。当然,不要因此去手动修改 package-lock.json。

你可能感兴趣的:(npm)