npm是什么
- NPM作为Node的模块管理和发布工具,即使不做node开发,也是有必要学习npm的。npm是开源,你可以使用别人开发的npm包,也可以自己发布npm包,方便在不同的项目中使用,便于团队开发。
- nodejs以包的形式组织程序模块,包的定义很简单:包含文件内容符合规范package.json文件的目录或归档文件,就是init的package.json文件和自己写的js文件
灵魂:package.json
1 | { |
包的定义和NPM都围绕着package.json文件做文章,package.jaon用于存放模块的名称、版本、作者、模块入口、依赖项等信息。1
npm init
在需要的目录下执行创建一个全新的package.json文件1
npm help json
打开帮助文档,根据实际的项目需求自行初始化package.json的项目
基础配置
- name:必选项,表示模块名称。命名时不能包含js、node、和url中需要转义的字符,不能以.和_为开头
- version:必选项,表示模块的版本号。版本号以主版本号.副版本号.补丁版本号 构成(如1.0.1)
- main: 必选项,模块入口文件相对路径(相对于模块根目录)。自己创建的npm包的js文件路径
- description:可选项,表示模块功能描述,显示在 npm search “package-name” 中
- keywords:可选项,数组类型,表示模块的关键字,显示在 npm search “package-name” 中
- author:可选项,表示发起者信息
engines:可选项,依赖的node版本, 示例如下
1
2
3
4
5{
"engines": {
"node": ">=0.8.0"
}
}respository:可选项,源码托管地址,示例如下
1
2
3
4
5
6{
"repository":{
"type": "git",
"url": "git+xxx.git"
}
}scripts:可选项,自定义在cli中输入
npm “scripts”时实际执行的程序。npm默认提供大量的script供我们调用- dependencies、devDependencies:可选项,用于配置模块的生产环境依赖包和开发环境依赖包。当执行npm install时,npm会根据这两个配置项的值去下载安装相关的依赖包。
两者的区别是devDependencies是模块开发过程的依赖包(如:gulp只在开发时有用的模块),并且当其他模块需要依赖当前模块时,当通过npm install “package-name”时会自动下载安装dependencies的包而不会下载devDependencies的包。
查找、安装、卸载、更新依赖包
包的作用范围分为 全局 和 本地 两种
包的种类
全局包
用作在cli上直接调用,而无法在项目中通过require导入依赖包。如将gulp安装到全局时,则可在cli中输入gulp调用了(gulp的知识自行学习)
npm install -g gulp
cmd或shell中直接调用1
gulp
本地包
用作在项目中通过require导入依赖包,供项目使用。- 全局和本地的依赖包是存放在哪里呢,通过
1
2npm root -g
/Users/caijuan/.nvm/versions/node/v8.9.4/lib/node_modules
1 | npm root |
可分别查看全局和本地的依赖包下载安装的绝对目录了,本地的依赖包会存放在当前根目录下的node_modules目录下
安装包
全局
1
npm install -g "package-name"
本地
1
npm install "package-name"
这样会安装最新版的包,若需要安装特定版本,需要1
npm install "package-name"@"version"
卸载包
卸载全局
1
npm uninstall -g "package-name"
卸载本地
1
npm uninstall "package-name"
更新包
更新全局
1
npm update -g "package-name"
更新本地
1
npm update "package-name"
发布包
准备工作
- 账号:要发布到npm,需要一个npm账号,在https://www.npmjs.com/ 中申请即可
- 包的名字不能重复
- 一旦发布,24小时就不能删除,名字就唯一
- 知道nodejs是什么
- 了解es6 import 和 exports,知道js的对象结构
安装nodejs
创建自己的包
- 目录结构
创建一个文件夹,里面写入自己的js文件,使用1
npm init
初始化生成package.json文件,这个时候需要输入一些参数,代表含义可以参考上面介绍
- 开发一个简单的hello程序
a.js1
2
3
4function hello(name){
console.log("hello "+ name);
}
exports.hello=hello;
这里的a.js就是入口文件,需要在package.json里修改
b.js使用1
2var h = require('./a');
h.hello('caijuan');
发布
添加用户,填入自己的npm账户、密码和邮箱
1
npm adduser
发布npm包
1
npm publish
readme
在根目录下添加readme.md文档 readme必须是小写的,本人试过大写的不生效里面写入一些提示即可
使用
安装
1
npm i cj02
调用
如果是用es6语法的话1
2import Cj from "cj02";
Cj.hello('caijuan');改版
如果是该包需要改动,直接修改源文件,然后改变package.json里version版本号,然后重新发版即可删包
需要在24h以内1
npm unpublish cj-pagevisibility -force