Node.js和npm
1. Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统,包含在node.js安装包中,安装node.js时会被一起安装。
2. NPM
npm 是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)。包的结构能够轻松跟踪依赖项和版本。
npm 由三个独立的部分组成:
- 网站:查找包(package)、设置参数以及管理 npm 使用体验的主要途径。
- 注册表(registry):是一个巨大的数据库,保存了每个包(package)的信息。
- 命令行工具 (CLI):通过命令行或终端运行。开发者通过 CLI 与 npm 打交道。
npm设置国内镜像
## 设置阿里云npm镜像
npm config set registry https://registry.npmmirror.com
## 验证
npm config get registry
不推荐使用cnpm,原因有三:
- 项目脚本默认是以npm启动,而依赖模块是cnpm安装,在极少情况下可能会导致发生一些错误
- 笔者亲身体会,同一项目在Mac和Win之间使用时,有极少情况会发生一些莫名奇妙的错误,使用npm则正常;
- cnpm经常无法生成package-lock.json文件
- 某些资源或依赖包无法下载,详见:https://segmentfault.com/q/1010000015233708
但是:npm设置了国内镜像后,也要比cnpm慢非常多;频繁执行npm install的场景,推荐使用cnpm。
恢复默认源:(实测在linux上默认源比镜像快)
npm config set registry https://registry.npmjs.org/
1> 常用命令
## 查看npm版本
npm -v
## 查看已安装的包
npm list -g --depth 0
2> 初始化,创建项目描述文件
npm init
此命令会在当前目录生成一个package.json文件,package.json 文件记录项目的描述信息:项目作者、项目描述、项目依赖哪些包、插件配置信息,一般情况下此文件是必须要有的,方便后续的项目添加和其他开发人员的使用。
package.json文件内容详解:
name 项目名称
version 项目的版本号
description 项目的描述信息
main 项目入口文件,默认值是根目录下的index.js
scripts 指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm start时,所要执行的命令
entry point 项目的入口文件
test command 项目启动时脚本命令
git repository 如果你有 Git 地址,可以将这个项目放到你的 Git 仓库里
keywords 关键词
author 作者叫啥
license 项目要发行的时候需要的证书,平时玩玩忽略它
3> 安装模块
npm install packagename ## 默认安装最新版
npm install packagename 0.0.1 ## 指定安装版本
在安装 npm 包时,有两种命令参数可以把包信息写入 package.json 文件:npm install --save 和 npm install –save-dev ,如:
npm install --save-dev gulp-uglify
-
-save 会把依赖包名称添加到 package.json 文件 dependencies 键下
-
-save-dev 则添加到 package.json 文件 devDependencies 键下,如:
{
"dependencies": {
"vue": "^2.2.1"
},
"devDependencies": {
"babel-core": "^6.0.0",
"babel-loader": "^6.0.0",
"babel-preset-latest": "^6.0.0",
"cross-env": "^3.0.0",
"css-loader": "^0.25.0",
"file-loader": "^0.9.0",
"vue-loader": "^11.1.4",
"vue-template-compiler": "^2.2.1",
"webpack": "^2.2.0",
"webpack-dev-server": "^2.2.0"
}
}
dependencies是运行时依赖:
dependencies 下的模块,是发布后要依赖的模块,譬如像jQuery库或Angular框架类似的,开发完后后肯定还要依赖它们,否则就运行不了。
devDependencies是开发时的依赖:
devDependencies 下列出的模块,是我们开发时用的,比如 我们安装 js的压缩包gulp-uglify 时,我们采用的是 “npm install –save-dev gulp-uglify ”命令安装,因为我们在发布后用不到它,而只是在我们开发才用到它
正常使用npm install时,会同时下载dependencies和devDependencies中的模块,当使用npm install –production或者注明NODE_ENV变量值为production时,则只会下载dependencies中的模块。
4> 删除模块
npm uninstall 模块:删除模块,但不删除模块留在package.json中的对应信息
npm uninstall 模块 --save 删除模块,同时删除模块留在package.json中dependencies下的对应信息
模块 --save-dev 删除模块,同时删除模块留在package.json中devDependencies下的对应信息
注意:对模块的安装、使用,请务必参考npm官网; 网上很多安装方法都很过时;打开npm官网,搜索欲安装和使用的模块,然后就能看到其最新官方的安装方法。
常用模块:
- gulp-load-plugins:自动加载
package.json
中的 gulp 插件 - gulp-rename: 重命名
- gulp-uglify:文件压缩
- gulp-concat:文件合并
- gulp-less:编译 less
- gulp-sass:编译 sass
- gulp-clean-css:压缩 CSS 文件
- gulp-htmlmin:压缩 HTML 文件
- gulp-babel: 使用 babel 编译 JS 文件
- gulp-jshint:jshint 检查
- gulp-imagemin:压缩jpg、png、gif等图片
- gulp-livereload:当代码变化时,它可以帮我们自动刷新页面