npm是什么

资源包的管理器,安装NodeJS时会直接安装NPM

常用命令

$ 下载并安装node.js也就将npm直接安装

$ npm install npm@latest -g        // 更新npm

$ npm i [package_name]         // 安装包,将在当前目录创建一个node_modules目录,将下载的包保存到这个目录

$ npm update     // 获取最新的包并更新

$ npm uninstall [package_name]    // 卸载包,命令是将node_modules目录将包的文件删除

$ npm uninstall --save [package_name]    // 卸载包,将从package.json文件中删除依赖, 如果--save-dev安装就需要换成--save-dev

# npm i -g [package_name]    // 全局安装包,两种安装本地和全局安装,如果遇到acces错误权限问题,需要在前面加sudo,安装在/usr/local/lib/node_modules/中

$ npm update -g [package_name]    // 更新全局包

$ npm uninstall -g [package_name]    // 卸载全局包

$ npm init -y 快速创建package.json包

package.json参数介绍

name - 包名

version - 包的版本号

description - 包的描述

homepage - 包的官网 url 

author - 包的作者姓名

contributors - 包的其他贡献者姓名

dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下

repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上

main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")

keywords - 关键字

npm install 安装模块

npm i [package_name] --save-dev

1、-S, --save 安装包添加到dependencies(项目依赖)中

    npm i 包名 --save

    当发布时可以不会将node_module目录发布出去,可以将package.json发布出去,其它项目的人,可以通过npm install 下载dependenciess中的所有包内容.

    例:
        npm install gulp --save 或 npm install gulp -S

        "dependencies": {
            "gulp": "^1.0.0"
        }

2、-D, --save-dev 安装包信息将加入到devDependencies(开发阶段的依赖),所以开发阶段一般使用它

    npm install gulp --save-dev 或 npm install gulp -D

    "devDependencies": {
        "gulp": "^1.0.0"
    }


3、-O, --save-optional 安装包信息将加入到optionalDependencies(可选阶段的依赖)

    npm install gulp --save-optional 或 npm install gulp -O
    "optionalDependencies": {
        "gulp": "^1.0.0"
    }


4、-E, --save-exact 精确安装指定模块版本

    npm install gulp --save-exact 或 npm install gulp -E
    输入命令npm install gulp -ES,留意package.json 文件的 dependencies 字段,以看出版本号中的^消失了

    "dependencies": {
        "gulp": "3.9.1"
    }

npm i 选项–global,–save,–save-dev

-global: 简写 -g

    npm i express -g 为全局安装,这种就可以直接使用express命令, 否则会提示express不是内部或外部命令

-save: 简写 -S, 作用是在package.json的dependencies字段增加或修改安装包和版本号

-save-dev: 简写 -D, 是修改devDependencies, 这样就不用安装了某个包之后手动修改package.json

~ 与 ^ 版本

版本分为: 主版本号、次版本号、补丁版本号

"devDependencies": {
    "vue": "~2.2.2",            // 匹配最近小版本,如,会匹配所有的2.2.x版本,但最高不会匹配2.3.0
    "vue-router": "^2.2.0"        // 最近的一个大版本,所有 2.x.x但不不包括3.0.0,相当于 2.0.0 <= version < 3.0.0
}

npm ls 查看安装的模块

查看安装模块及依赖:npm ls -g

发布模块

使用以下命令在 npm 资源库中注册用户(使用邮箱注册):

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) xxxxxx@qq.com

来发布模块命令: $ npm publish

script属性

script属性定义的对应了一段shell脚本

1、npm start 启动模块

    该命令写在package.json文件scripts的start字段中,可以自定义命令来配置一个服务器环境和安装一系列的必要程序

    "scripts": {
        "start": "gulp -ws"
    }

2、npm stop 停止模块

3、npm restart 重新启动模块

常见错误

一、npm使用过程中遇到的 Cannot find module 'internal/fs',错误场景 gulp中执行任务报错,的确amd-optimize插件中的graceful-fs与gulp中graceful-fs的版本问题,

    解决:
        删除插件 npm uninstall graceful-fs
        安装  npm i graceful-fs --save

二、$ npm view react versions    查看包在npm所有版本

三、$ npm i vue@2.0.0 --save    安装指定版本

| 参考资料
| https://www.npmjs.com.cn/
| https://www.cnblogs.com/blackgan/p/7828047.html 常用命令
| http://www.alloyteam.com/2016/03/master-npm/
| https://github.com/ericdum/mujiang.info/issues/6/
| http://www.luckyonecn.com/blog/difference_between_dependencies_and_devdependencies_in_npm/