npm makes it easy for JavaScript developers to share and reuse code, and it makes it easy to update the code that you're sharing.javascript
简单来讲,npm就是javascript的包管理工具,相似java语法当中的maven, gradle, python的pip。vue
npm是和Node.js一块儿发布的,只要安装了Node.js,npm也安装好了,能够从Node.js的下载页下载对应操做系统的安装包安装便可。 安装好后,执行以下命令,检查是否安装成功。java
$ node -v v6.10.0 $ npm -v 4.4.1
可是因为npm自身的更新频率比Node.js高不少,因此经过上面的命令安装的npm可能不是最新版本,能够经过下面的命令单独更新npmnode
$ npm install npm@latest -g
执行命令python
$ npm install <package_name>
即可以安装对应的包到执行命令的当前目录,并建立一个node_modules
的文件夹,而后把须要安装的安装包下载到里面。webpack
package.json
经过上面的命令,直接安装的包默认都是最新版本的。可是在项目中,咱们怎么让一块儿开发的同事知道项目中用了哪些包,具体包的版本信息呢?这时package.json
就上场了,能够把它想成是java语言中的pom.xml
,
python语言中的requirements.txt
。git
一个基本的package.json
文件至少须要包含两个重要信息: 包名name
和版本信息version
。
例如:github
{ "name": "my-awesome-package", "version": "1.0.0" }
package.json
咱们可使用命令npm init
来初始化一个package.json
文件,运行这个命令后,它会询问一些关于包的基本信息,根据实际状况回答便可。若是不喜欢这种方式,可使用npm init --yes
命令直接使用默认的配置来建立package.json
文件,最后根据须要修改建立好的package.json
文件便可。web
package.json
文件建立好后,咱们来看看它长得什么样子吧!vue-cli
{ "name": "my_package", "description": "", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "https://github.com/ashleygwilliams/my_package.git" }, "keywords": [], "author": "", "license": "ISC", "bugs": { "url": "https://github.com/ashleygwilliams/my_package/issues" }, "homepage": "https://github.com/ashleygwilliams/my_package" }
主要字段的含义以下:
name: 模块名, 模块的名称有以下要求:
version: 模块版本信息
READMD.md
或README
文件读取第一行内容做为它的默认值。index.js
。相似git同样,npm也能够作一些简单的配置来设置一些咱们经常使用的信息
$ npm set init.author.email "wombat@npmjs.com" $ npm set init.author.name "ag_dubs" $ npm set init.license "MIT"
这样下次执行npm init
的时候,就会用上咱们配置的一些默认信息啦!
使用npm install
会读取package.json
文件来安装模块。安装的模块分为两类dependencies
和devDependencies
,分别对应生产环境须要的安装包和开发环境须要的安装包。
一样在安装模块的时候,能够经过指定参数来修改package.json
文件,如
$ npm install <package_name> --save $ npm install <package_name> --save-dev
来将新安装的模块信息记录到package.json
文件。
$ npm update
$ npm uninstall <package_name>
若是要在卸载模块的同时,也将他从package.json文件中移除,能够添加跟安装时候同样的参数,例如:
$ npm uninstall --save lodash
默认状况下。咱们执行默认的安装命令安装的包都是安装到当前目录下的,只能在当前目录下使用。可是假如咱们须要使用一些全局的软件,如grunt
,咱们能够在安装的时候,添加-g
选项来安装,方便后面在任何目录下均可以使用grunt
相关的命令
$ npm install -g grunt
同理,更新全局的安装包只须要执行命令
$ npm update -g
为了查看当前哪些包须要更新,可使用以下命令来查看
$ npm outdated -g --depth=0 Package Current Wanted Latest Location vue-cli 2.7.0 2.8.1 2.8.1 webpack 1.13.2 2.2.1 2.2.1 webpack-dev-server 1.14.1 2.4.1 2.4.1
卸载全局安装的包也只须要加上-g
选项便可。如
$ npm uninstall -g jshint
一个Node.js模块就是一个能够发布到npm,供其余开发者下载和使用的模块。那么,到底怎样和其余开发者分享咱们的模块呢?
首先,咱们必须建立一个package.json
文件,添加上关于咱们想要分享的模块信息,如:模块功能,开发者信息等。
一旦package.json
文件建立好后,咱们须要建立一个模块被引入时,就加载的文件。
即package.json
中main
字段指定的文件,默认为index.js
。咱们须要在文件中将一个函数赋值给exports
模块,方便其余开发者调用咱们的模块。如
exports.printMsg = function() { console.log("This is a message from the demo package"); }
在使用npm的时候,有两个概念容易搞混,那就是包(Pacakges)和模块(Modules)。简单来讲,包和模块的区别以下:
package.json
文件描述了的文件或者目录什么是包?
a) a folder containing a program described by a package.json file
b) a gzipped tarball containing (a)
c) a url that resolves to (b)
d) a <name>@<version> that is published on the registry with (c)
e) a <name>@<tag> that points to (d)
f) a <name> that has a latest tag satisfying (e)
g) a git url that, when cloned, results in (a).
什么是模块?
- A folder with a package.json file containing a main field.
- A folder with an index.js file in it.
- A JavaScript file.
在使用npm时,咱们能够根据我的的须要,指定不少配置信息。
npm的配置信息加载优先级以下(从高到低)
npmrc
文件
查看配置
$ npm config list -l
最后介绍一个比较重要的配置,当咱们使用默认配置从npm官网下载模块时,因为网络的因素,会致使咱们的下载速度特别慢。因此,咱们能够配置一些国内的镜像来加快咱们的下载速度。在这里,我推荐使用淘宝的npm镜像, 具体使用方式以下:
临时使用, 安装包的时候经过--registry
参数便可
$ npm install express --registry https://registry.npm.taobao.org
全局使用
$ npm config set registry https://registry.npm.taobao.org // 配置后可经过下面方式来验证是否成功 npm config get registry // 或 npm info express
使用cnpm使用
// 安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org // 使用cnpm安装包 cnpm install express
请参考官方文档