官网是这个:https://www.npmjs.com/,
官网介绍:npm is the package manager for javascript,
npm是js的包管理器,更多的用于nodejs端。
基本上每种语言都有自己的包管理器,nodejs是npm以及yarn;
java是ant,maven,gradle;
python有很多包管理器;
ruby是rubygem。
如果你熟悉以上某种包管理器,那么npm也是大同小异的。
基于package.json安装项目依赖包
1
|
npm
install
|
安装一个npm包
1
2
3
|
npm
install
express
or
npm i express
|
卸载一个npm包
1
|
npm uninstall express
|
列出当前使用到的npm包
1
|
npm list
|
以上命令添加-g后为全局使用,
熟悉以上命令基本可以简单使用npm了。
熟悉常用命令后,开始各种npm install,或者npm install -g,
某天想自己发布一个npm包,发现有点茫然,那就从头开始。
第一步是npm init,
首先创建一个文件夹,然后cd到文件夹下,然后执行npm init,
发现需要你输入一些信息,依次输入,
package name,包名是什么,也就是最终其他人npm install xxx,这个xxx就是包名;
version,版本号;
description:描述;
entry point:入口js;
test command:测试命令,暂时空开;
gir repository:git库地址,暂时空开;
keywords:关键字;
author:作者,先写你的名字;
license:协议;
最后询问你是否生成package.json,输入y回车。
在这个文件夹下,新建lib,test文件夹,
新建index.js文件,
1
|
// nothing
|
新建lib/qiao.test.demo2.js文件,
1
2
3
4
5
6
|
/**
* say hello
*/
exports.sayHello =
function
(){
console.log(
'hello world!'
);
};
|
新建test/test.js文件,
1
2
3
4
5
6
7
|
var
qiaoTestDemo2 = require(
'../lib/qiao.test.demo2.js'
);
function
test(){
qiaoTestDemo2.sayHello();
}
test();
|
测试一下,执行node test/test.js,
创建帐号
首先需要注册一个帐号,输入npm adduser,然后输入姓名,密码,邮箱,注意,密码不能过于简单
激活邮箱
npm adduser成功后,npm会给你的邮箱发一封邮件,需要激活,如果不激活就发布npm包会报错,如下
首次发布
npm publish
验证1
在npm官网搜索qiao.test.demo2,可以搜索到
验证2
npm install qiao.test.demo2可以安装
如上,已经可以发布一个npm包了,但是发布的包基本没啥用,
接下来实战一个小功能,基于archiver封装一个压缩zip的功能,
首先快速的看一遍archiver的文档:https://www.npmjs.com/package/archiver
提炼出核心代码到lib/qiao.test.demo2.js中,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
var
fs = require(
'fs'
);
var
archiver = require(
'archiver'
);
/**
* zip folder
* destZip, d:/1.zip
* sourceFolder, d:/test1
* cb, callback
*/
exports.zipFolder =
function
(destZip, sourceFolder, cb){
// init
var
output = fs.createWriteStream(destZip);
var
archive = archiver(
'zip'
, {
zlib: { level: 9 }
});
// on
output.on(
'close'
,
function
() {
cb(
null
,
'压缩完成!'
);
});
archive.on(
'error'
,
function
(err) {
cb(err);
});
// zip
archive.pipe(output);
archive.directory(sourceFolder,
false
);
archive.finalize();
};
|
test/test.js修改为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var
qiaoTestDemo2 = require(
'../lib/qiao.test.demo2.js'
);
function
test(){
var
destZip =
'd:/1.zip'
;
var
sourceFolder =
'd:/test1'
;
qiaoTestDemo2.zipFolder(destZip, sourceFolder,
function
(err, msg){
if
(err)
throw
err;
console.log(msg);
});
}
test();
|
执行node test/test.js发现报错,如下
原来是没有引入archiver,这个时候执行npm install archiver,
然后再次执行node test/test.js,看到压缩完成,如下
压缩一个文件夹的功能,基于archiver包已经实现,现在可以再次发包,
需要将package.json中的version修改为0.0.2,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
{
"name"
:
"qiao.test.demo2"
,
"version"
:
"0.0.2"
,
"description"
:
"qiao test demo 2"
,
"main"
:
"index.js"
,
"scripts"
: {
},
"keywords"
: [
"qiao"
,
"test"
,
"demo"
,
"2"
],
"author"
:
"qiaowenbin"
,
"license"
:
"MIT"
,
"dependencies"
: {
"archiver"
:
"^2.1.0"
}
}
|
同时你会发现,dependencies中添加对archiver的依赖
再次执行npm publish,发布qiao.test.demo2 0.0.2版本成功
npm包已经发布完毕,现在要测试如果是其他人安装你的包后是否可以使用,
新建一个文件夹,写一个test.js如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var
qiaoTestDemo2 = require(
'qiao.test.demo2'
);
function
test(){
var
destZip =
'd:/1.zip'
;
var
sourceFolder =
'd:/test1'
;
qiaoTestDemo2.zipFolder(destZip, sourceFolder,
function
(err, msg){
if
(err)
throw
err;
console.log(msg);
});
}
test();
|
注意,和之前test/test.js的不同是require不同,这次是直接引用,
然后执行node test.js,发现报错,是没有引用qiao.test.demo2包,
执行npm install qiao.test.demo2,安装包,再次执行node test.js,
发现还是报错,报错如下:
zipFolder未定义,但是lib/qiao.test.demo2.js中是有定义的,问题出在哪里,
出在index.js中,因为index.js是你这个包的入口,而目前的index.js是空的,需要修改为:
1
|
module.exports = require(
'./lib/qiao.test.demo2'
);
|
再次发布为0.0.3版本,再次安装,再次执行node test.js,成功,
目前可以做到的是:
1.注册npm
2.发布npm包
3.实现压缩文件夹功能
4.将该包对外
在npm官网上搜索qiao.test.demo2,点进去,发现页面是空白的,
不像其他npm包一样,有详细的介绍,如下
因为包下没有readme.md文件,添加一个readme.md,如下,markdown的语法可以自行百度,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# qiao.test.demo2
---
zip folder by archiver
# install
---
npm install qiao.test.demo2
# zip folder
---
var
qiaoTestDemo2 = require(
'../lib/qiao.test.demo2.js'
);
function
test(){
var
destZip =
'd:/1.zip'
;
var
sourceFolder =
'd:/test1'
;
qiaoTestDemo2.zipFolder(destZip, sourceFolder,
function
(err, msg){
if
(err)
throw
err;
console.log(msg);
});
}
test();
|
将package.json中的version修改为0.0.4,再次npm publish,刷新npm页面,如下
接下来还可以丰富下package.json文件,最简单的方法是看文档,或者下载一个成熟的npm包进行模仿,
比如npm install express后看express的package.json是怎么写的,
丰富后如下,主要丰富了author,homepage,repository,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
{
"name"
:
"qiao.test.demo2"
,
"version"
:
"0.0.4"
,
"description"
:
"qiao test demo 2"
,
"main"
:
"index.js"
,
"scripts"
: {
},
"keywords"
: [
"qiao"
,
"test"
,
"demo"
,
"2"
],
"author"
: {
"name"
:
"qiaowenbin"
,
"url"
:
"http://insistime.com"
},
"homepage"
:
"http://insistime.com/"
,
"license"
:
"MIT"
,
"dependencies"
: {
"archiver"
:
"^2.1.0"
},
"repository"
: {
"type"
:
"git"
,
"url"
:
"git+https://github.com/ your github url"
}
}
|
一般npm包都会开源到github上一份,package.json中的repository会指向github,用户可以直接查看源码
需要注意的一点是npm发布后不能撤回,也就是千万不要把一些重要的配置文件发布上去,
这个时候需要用的npmignore文件,类似gitignore,
配置好后就可以忽略一些不想上传的文件
细心的同学会发现,最开始npm init的时候有一项是test commad,之前的空的,
现在需要稍作修改,在package.json中修改为:
1
2
3
|
"scripts"
: {
"test"
:
"node test/test.js"
},
|
之后就可以执行npm run test,如下
你也可以添加其他脚本,在package.json中的script下添加,key-value,value为要执行的命令,
然后就可以使用npm run key的方式执行对应的value命令
1.qiao.ext.oss
http://uikoo9.com/book/chapterDetail/124
2.qiao.plugin.npm
http://uikoo9.com/book/chapterDetail/123
1.npm注册
2.npm发包
3.实现压缩文件夹功能
4.将npm包对外
5.添加readme.md
6.丰富package.json
7.添加npmignore
8.使用npm脚本
http://uikoo9.com/更多精彩内容
求打赏(长按图片即可识别)~ |
捐助列表:http://uikoo9.com/donate/ |