开始需要使用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就是用于描述这个树形结构
clipboard.png

具体看官方描述:
https://docs.npmjs.com/files/...


Jonithan
249 声望12 粉丝

GitHub:[链接]