快速上手 - npm 包管理器

  • 作者:KK

  • 发表日期:2017.11.9


介绍

npm 是一个包管理器,简单地说就是可以用它下载别人的 node 代码,就像插件一样,下载后咋们就可以在自己的 JS 脚本里进行引用了,前期你可以理解为 模块管理器

安装 node 的时候就会自带 npm ,你可以通过npm -v查看它的版本号确认是否已安装。


install 下载别人的包

在你的项目目录下执行npm install mysql就会下载一个叫 mysql 的包,下载来源是国外,有时候可能因为网络问题导致下载异常或无响应等,建议重试(下面会教你怎么从中国的下载)。

下载完成后会在当前目录产生一个node_modules目录,进里面会发现有个 mysql 目录(其实还有其它目录),这就是npm下载安装出来的东西,一看就懂咯,mysql 还引用了别的包来进行工作。


uninstall 删除指定的包

npm uninstall mysql那个 node_modules/mysql 以及其它目录就会被删除掉了。


让团队成员安装同样的包

一个项目下来我们会安装许多第三方包,比如有 A、B、C、D 四个包吧,如果有新成员加入项目组的时候,他如果分别执行下面4条安装命令是很不科学的项目管理方法:

npm install A
npm install B
npm install C
npm install D

#npm install X ... 甚至有更多模块要安装呢

其实 npm 可以生成一个清单文件,用于记下当前有哪些模块,然后将这个清单文件给新成员来快速安装的,接着看下面吧。

生成 package.json

先假设你已经安装了 mysql 模块吧,然后在当前测试项目的目录下(node_modules 目录的上一级)执行npm init,这就是用于生成“清单文件”的命令,但需要你输入一些信息到这个清单里面,下面讲解一下这些输入项吧(其实你可以全部按回车,不输入任何东西):

  1. name: (my-codes) 简单说这是你的代码项目名,比如叫 “test” ,其实你不输入直接回车也可以,默认值就是它括号里的值 “my-codes”

  2. version: (1.0.0) 项目代码的版本号,不输入直接回车的话就默认 1.0.0

  3. description 项目的介绍,可以为空,直接回车

  4. entry point: (index.js) 入口文件,默认 index.js

  5. test command 测试命令,就是调用单元测试、API测试什么的确保项目正常的测试命令,默认为空,比如我项目的测试命令是mocha tests/index.js,因为我用了 mocha 这个测试框架

  6. git repository git项目地址,默认为空

  7. keywords 关键字,假如你的代码发布到开源平台后,希望别人通过什么关键字搜到你的项目,默认为空

  8. author 作者,默认为空

  9. license: (ISC) 开源许可协议,默认为 ISC,完全不懂许可协议这块的朋友可以先直接回车吧

  10. Is this ok? (yes) 就是问你以上的 JSON 表达的项目信息是否没问题,直接回车,因为默认 yes

好了然后你就会在当前目录下发现多了一个package.json文件,打开里面的内容基本是你刚才输入的项目信息,以 JSON 的格式储存,其中你会在文件内容中看到dependencies这么一个节点,里面包含了 mysql 和一个版本号描述,类似我这样的"mysql": "^2.15.0",意思是要求版本符合 version >= 2.15.0 and version < 3.0.0


npm install 读取 package.json

把这个 package.json 移动到一个新的空目录里,就当作是给了一个新的团队成员,然后在这个目录下执行 npm install,这时候 install 虽然我们没有指定任何包名,但是它会读取 json 文件,从 dependencies 中找到依赖的包进行安装

所以说,如果我们项目中有100个第三方包的话,只要通过npm init命令创建 json 文件,然后把这个文件丢给新成员,他再npm install的话就能把这100个包给装下来了。

这样也就不需要把第三方包给提交到代码仓库上,也能让其他成员获得这些第三方包了。


npm list查看当前安装的包

npm list列出所有已经安装的包和版本号

npm list 包名查看指定的包,比如npm list mysql查看当前已经安装的 mysql 是什么版本,或者用来测试有没有安装 mysql 包


--save往 package.json 里面追加新的包

一般来说我们平时安装第三方包的时候都会加个--save参数,比如npm install --save unzip,这样在安装完成后,npm 会往 package.json 的 dependencies 节点里面追加登记新的依赖包,然后我们将这个 package.json 提交到 SVN 或 Git 仓库上,别人下载来后执行 install 就能一样安装我们所使用的新包。


--save-dev往 package.json 的 devDependencies 追加开发依赖包

其实除了 dependencies ,package.json 还且一个相似节点叫 devDependencies,只要将--save参数换成--save-dev就往 devDependencies 追加依赖包了

那这个 devDependencies 有什么作用呢?其实是这样的,有时候我们会用到一些只在开发时用到的包,比如webpack,之所以 webpack 官方会教我们用npm install --save-dev webpack这个命令来安装它就是因为它只在开发时用到,线上程序运作不用它

然后在线上部署程序时,将 package.json 和代码提交到线上后只要执行npm install --production就会只安装 dependencies 里面的包,不会安装 devDependencies 里面的包

而平时npm install会默认将 dependencies 和 devDependencies 里面的包都给安装下来