快速上手 - 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
,这就是用于生成“清单文件”的命令,但需要你输入一些信息到这个清单里面,下面讲解一下这些输入项吧(其实你可以全部按回车,不输入任何东西):
name: (my-codes)
简单说这是你的代码项目名,比如叫 “test” ,其实你不输入直接回车也可以,默认值就是它括号里的值 “my-codes”version: (1.0.0)
项目代码的版本号,不输入直接回车的话就默认 1.0.0description
项目的介绍,可以为空,直接回车entry point: (index.js)
入口文件,默认 index.jstest command
测试命令,就是调用单元测试、API测试什么的确保项目正常的测试命令,默认为空,比如我项目的测试命令是mocha tests/index.js
,因为我用了 mocha 这个测试框架git repository
git项目地址,默认为空keywords
关键字,假如你的代码发布到开源平台后,希望别人通过什么关键字搜到你的项目,默认为空author
作者,默认为空license: (ISC)
开源许可协议,默认为 ISC,完全不懂许可协议这块的朋友可以先直接回车吧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 里面的包都给安装下来