ZhangYang's Blog

npm-npmscript

npm

  • NPM(node package manager)通常称为node包管理器
  • 主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布

npm的安装

  • 安装node后,npm会自动被安装
1
2
3
4
5
6
7
8
// 查看node版本
node -v
// 查看npm版本
npm -v
// 更新npm的版本
sudo npm install npm -g

npm包管理

  • 本地安装:package会被下载到当前所在目录,也只能在当前目录下使用
  • 全局安装:package会被下载到到特定的系统目录下,安装的package能够在所有目录下使用
1
2
3
4
5
6
7
8
9
10
11
12
13
// 本地安装
npm install grunt-cli
// 全局安装
npm install -g grunt-cli
// 如果下载速度比较慢,可以使用淘宝的镜像
// 先执行下面命令
// 以后安装就用 cnpm 代替 npm
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g grunt-cli
// 卸载安装
npm uninstall grunt-cli

package.json

  • npm init 可以初始化生成一个package.json
  • package.json 是一个 json 格式的文件,用来记录当前的 npm 包的相关信息
  • name:包的名字
  • version:版本号
  • description:描述
  • main:包的入口文件(node_modules找到jquery文件夹找到package.json里的main对应的jquery.js)
  • script: 运行脚本命令的npm命令行缩写(如npm run start)
  • author: 作者
  • license: 版权信息
  • dependencies:项目运行依赖,发布的时候,不需要发布依赖的包,只要发布其名字,别人下载的时候,会自动下载依赖的包
  • devDependencies:开发依赖,只有自己本地开发时候用的依赖包,发布以后别人用不到
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
{
"name": "test", //名称
"version": "0.0.1", //版本
"description": "This is my first node.js program.", //描述
"main": "index.js", //入口
"keywords": [ //关键字
"node.js",
"javascript"
],
"scripts": { //执行命令行
"start": "node index.js"
},
"author": "Mike", //作者
"license":"MIT", //认证
"dependencies": { //生产环境依赖
"express": "latest"
},
"devDependencies": { //开发环境依赖
"bower": "~1.2.8",
"grunt": "~0.4.1"
}
}

npm install –save app 与 npm install –save-dev app

npm install –save app

  • 项目运行依赖:安装名为 app 的包,并在package.json中添加到dependencies项目运行依赖中去,发布以后别人会自动下载app 依赖

npm install –save-dev app

  • 开发依赖:安装名为app的包,并在package.json中添加到devDependencies开发依赖中去,这个app包依赖只有开发者自己使用,发布后别人用不到

nodule_modules的查找路径

  • 从文件所在目录下的 nodule_modules 开始,逐级向上查找,直到找到根目录,如果还找不到,就会报错
1
2
3
4
5
6
/e/xiaoming/senior/s5/webpack2-tutorial/node_modules
/e/xiaoming/senior/s5/node_modules
/e/xiaoming/senior/node_modules
/e/xiaoming/node_modules
/e/node_modules
/node_modules

npm2和npm3

npm2

  • npm2 把每个依赖的包放在自己的子目录里
  • 优点:目录结构清楚
  • 缺点:可能会有重复冗余的依赖包:如下面示意里 a1 ,重复下载了
1
2
3
4
5
6
7
|- a //包
|- |- a1 //依赖
|- |- a2 //依赖
|
|- b //包
|- |- a1 //依赖
|- |- b2 //依赖

npm3

  • npm3 把每个依赖的包放同级目录下,这样就可以减少包的重复下载
1
2
3
4
5
|— a //包
|- a1 //依赖
|- a2 //依赖
|— b //包
|- b2 //依赖

npm script

  • package.json 文件有一个 scripts 字段,可以用于指定脚本命令,供 npm 直接调用
  • npm 内置了两个简写的命令:npm test 和 npm start,其它命令要写成 npm run xxx 形式
1
2
3
4
5
6
7
8
9
10
11
12
"scripts": {
"build": "node build.js",
"test": "cd desktop"
}
$ npm run build
等同于执行
$ node build.js
$ npm test
等同于执行
$ cd desktop