npm学习总结
开始需要使用npm的了,之前学习时都只是图快进行安装,简单总结下吧
一、什么是npm,为什么要npm
简单说,npm是一个项目的JavaScript包管理工具,随着项目越来越大,一个项目需要的包越来越多,如果每个包都靠GitHub下载,引入,就会很浪费时间,同时也不利于记录和管理
同时,npm更为各软件开发者提供分享和借鉴
npm有以下三个部分组成:
网站,注册表,命令行工具(CLI)
https://docs.npmjs.com/about-...
二、npm通过package.json管理包
一个项目下有一个package.json文件,此文件记录了项目安装的包,npm新装的包会写入此文件进行记录,也可以通过此文件的记录安装相应的包
举例:
{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "babel-traverse": "^6.26.0", "lodash": "^4.17.11" } }
此test项目中安装了babel-traverse和lodash这两个依赖,都记录于dependencies中
三、npm简单使用
1.初始化项目
初始化后,npm会创建package.json文件
这里有两个方法,其实只是有没有默认配置的区别而已
法一:npm会一个一个询问你项目信息
npm init
法二:npm会为你做好默认配置
npm init --yes 或者 npm init --y
2.可以安装包了
这里比如安装babel-traverse:
npm install babel-traverse //即npm install babel-traverse --save,若添加于开发环境,则选项为--save-dev
此行命令会在node_modules(没有则创建)中安装babel-traverse,并且在package.json和package.lock.json(没有则创建)的dependencies中记录此包(后面解释package.lock.json)
test/package.json
{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "babel-traverse": "^6.26.0" } }
注意到^,npm会匹配最新的大版本依赖包,比如"^6.26.0"会匹配所有6.x.x的包
安装完后我们可以看到node_modules中有babel-traverse文件夹,但为什么我们只装了babel-travers缺有那么多其他包呢,因为babel-traverse的开发也依赖了其他包,进入babel-travers文件夹打开package.json可以找到
"dependencies": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "debug": "^2.6.8", "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" }
npm也会安装这些包,相应地,这些包也可能含有其他包,因此会进行一个递归安装
四、本地安装与全局安装
本地安装即安装依赖包
npm install <package_name>
全局安装即将包作为一个命令行工具,例如jshint
npm install -g <package_name>
具体不同参数可参考此链接:https://www.cnblogs.com/limit...
五、package.lock.json是什么
前面讲到安装一个包时也会引入其他包,package.lock.json就是用于描述这个树形结构
具体看官方描述:
https://docs.npmjs.com/files/...