转自:https://blog.csdn.net/u011240877/article/details/76582670html
npm 是前端开发普遍使用的包管理工具,以前使用 Weex 时看了阮一峰前辈的文章了解了一些,此次结合官方文章总结一下,加深下理解吧!
1. 什么是 npm?
官方文档中对它的介绍是:前端
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.
即: npm 是一个包管理器,它让 JavaScript 开发者分享、复用代码更方便(有点 maven 的感受哈)。
在程序开发中咱们经常须要依赖别人提供的框架,写 JS 也不例外。这些能够重复的框架代码被称做包(package)或者模块(module),一个包能够是一个文件夹里放着几个文件,同时有一个叫作 package.json 的文件。
一个网站里一般有几十甚至上百个 package,分散在各处,一般会将这些包按照各自的功能进行划分(相似咱们安卓开发中的划分子模块),可是若是重复造一些轮子,不如上传到一个公共平台,让更多的人一块儿使用、参与这个特定功能的模块。
而 npm 的做用就是让咱们发布、下载一些 JS 轮子更加方便。
咱们能够去官方网站 https://www.npmjs.com/ 浏览、搜索想要的轮子,也能够直接在命令行中 search 一下意中轮。
使用 npm 后咱们能够很是方便地查看依赖的轮子是否有更新、是否须要下载新版本。
如今咱们知道 npm 是干什么的了。当人们提及 “npm” 时,可能在说三个东西:vue
只要开发者发布某个模块到仓库中,其余人就能够从 npm 网站或者命令行中下载、使用它了!html5
2. 安装 npm
npm 是依附于 node.js 的,咱们能够去它的官网 https://nodejs.org/en/download/ 下载安装 node.js。
下载好 node.js, npm 也就有了,使用 npm -v 查看安装的 npm 版本:node
zhangshixin$ node -v v6.10.0
3. 更新 npm
npm 更新地可比 node 勤快多了,所以你下载的 node 附带的 npm 版本可能不是最新的,你可使用以下命令下载最新 npm:webpack
npm install npm@latest -g
其中 install 不用介绍了,就是安装,后面的 npm@latest 就是 <packageName>@<version> 的格式,咱们在下载其余模块时也是这个格式。-g 表明全局安装。web
4. package.json 文件
package.json 文件很是重要,所以须要单独一小节介绍。
管理本地安装 npm 包的最好方式就是建立 package.json 文件。
一个 package.json 文件能够有如下几点做用:数据库
4.1 package.json 如何建立
使用 npm init 便可在当前目录建立一个 package.json 文件:npm
4.2 package.json 的内容
package.json 文件至少要有两部份内容:json
所有小写,没有空格,可使用下划线或者横线
x.x.x 的格式
符合“语义化版本规则”
好比:
{ "name": "shixinzhang-demo-package", "version": "1.0.0" }
其余内容:
description:描述信息,有助于搜索
main: 入口文件,通常都是 index.js
scripts:支持的脚本,默认是一个空的 test
keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目
author:做者信息
license:默认是 MIT
bugs:当前项目的一些错误信息,若是有的话
咱们能够为 init 命令设置一些默认值,好比:
> npm set init.author.email "shixinzhang2016@gmail.com"
> npm set init.author.name "shixinzhang"
> npm set init.license "MIT"
注意:
若是 package.json 中没有 description 信息,npm 使用项目中的 README.md 的第一行做为描述信息。这个描述信息有助于别人搜索你的项目,所以建议好好写 description 信息。
4.3 指定依赖的包
咱们须要在 package.json 文件中指定项目依赖的包,这样别人在拿到这个项目时才可使用 npm install 下载。
包有两种依赖方式:
举个例子:
{
"name": "my-weex-demo",
"version": "1.0.0",
"description": "a weex project",
"main": "index.js",
"scripts": {
"build": "weex-builder src dist",
"build_plugin": "webpack --config ./tools/webpack.config.plugin.js --color",
"dev": "weex-builder src dist -w",
"serve": "serve -p 8080"
},
"keywords": [
"weex"
],
"author": "fkysly@gmail.com",
"license": "MIT",
"devDependencies": {
"babel-core": "^6.14.0",
"babel-loader": "^6.2.5",
"babel-preset-es2015": "^6.18.0",
"vue-loader": "^10.0.2",
"eslint": "^3.5.0",
"serve": "^1.4.0",
"webpack": "^1.13.2",
"weex-loader": "^0.3.3",
"weex-builder": "^0.2.6"
},
"dependencies": {
"weex-html5": "^0.3.2",
"weex-components": "*"
}
}
5. Semantic versioning(语义化版本规则)
https://docs.npmjs.com/getting-started/semantic-versioning
dependencies 的内容,以 "weex-html5": "^0.3.2" 为例,咱们知道 key 是依赖的包名称,value 是这个包的版本。那版本前面的 ^ 或者版本直接是一个 * 是什么意思呢?
这就是 npm 的 “Semantic versioning”,简称”Semver”,中文含义即“语义化版本规则”。
在安卓开发中咱们有过这样的经验:有时候依赖的包升级后大改版,以前提供的接口不见了,这对使用者的项目可能形成极大的影响。
所以咱们在声明对某个包的依赖时须要指明是否容许 update 到新版本,什么状况下容许更新。
这就须要先了解 npm 包提供者应该注意的版本号规范。
若是一个项目打算与别人分享,应该从 1.0.0 版本开始。之后要升级版本应该遵循如下标准:
了解了提供者的版本规范后, npm 包使用者就能够针对本身的须要填写依赖包的版本规则。
做为使用者,咱们能够在 package.json 文件中写明咱们能够接受这个包的更新程度(假设当前依赖的是 1.0.4 版本):
若是只打算接受补丁版本的更新(也就是最后一位的改变),就能够这么写:
若是接受小版本的更新(第二位的改变),就能够这么写:
若是能够接受大版本的更新(天然接受小版本和补丁版本的改变),就能够这么写:
小结一下:总共三种版本变化类型,接受依赖包哪一种类型的更新,就把版本号准确写到前一位。
安装 package
使用 npm 安装 package 有两种方式:本地(当前项目路径)安装 或者 全局安装。
你选择哪一种安装方式取决于你将如何使用这个包:
npm install 默认就是安装到本地的
若是在你的项目里有 package.json 文件,运行 npm install 后它会查找文件中列出的依赖包,而后下载符合语义化版本规则的版本。
npm install 默认会安装 package.json 中 dependencies 和 devDependencies 里的全部模块。
若是想只安装 dependencies 中的内容,可使用 --production 字段:
npm install --production
6. 本地安装 package
npm 使用下面的命令下载一个包:
npm install <package_name>
后面就是要安装包的名称。这个命令会在当前目录建立一个 node_modules 目录,而后下载咱们指定的包到这个目录中。