手把手教你玩转npm包

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uikoo9/article/details/79010842

【npm是什么】

官网是这个: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也是大同小异的。


【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 init】

熟悉常用命令后,开始各种npm install,或者npm install -g,

某天想自己发布一个npm包,发现有点茫然,那就从头开始。

第一步是npm init,

首先创建一个文件夹,然后cd到文件夹下,然后执行npm init,

01.png

发现需要你输入一些信息,依次输入,

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,

02.png


【开始第一次发布】

创建帐号

首先需要注册一个帐号,输入npm adduser,然后输入姓名,密码,邮箱,注意,密码不能过于简单

3.png


激活邮箱

npm adduser成功后,npm会给你的邮箱发一封邮件,需要激活,如果不激活就发布npm包会报错,如下

04.png


首次发布

npm publish

05.png


验证1

在npm官网搜索qiao.test.demo2,可以搜索到

06.png


验证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发现报错,如下

07.png


原来是没有引入archiver,这个时候执行npm install archiver,

然后再次执行node test/test.js,看到压缩完成,如下

08.png


【再次发布】

压缩一个文件夹的功能,基于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版本成功

09.png


【使用自己的包】

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,


发现还是报错,报错如下:

11.png


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,成功,

23.png


【小结一下】

目前可以做到的是:

1.注册npm

2.发布npm包

3.实现压缩文件夹功能

4.将该包对外


【readme.md】

在npm官网上搜索qiao.test.demo2,点进去,发现页面是空白的,

不像其他npm包一样,有详细的介绍,如下

24.png


因为包下没有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页面,如下

12.png

【丰富package.json】

接下来还可以丰富下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" ,
     "email" "[email protected]" ,
     "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,用户可以直接查看源码


【.npmignore】

需要注意的一点是npm发布后不能撤回,也就是千万不要把一些重要的配置文件发布上去,

这个时候需要用的npmignore文件,类似gitignore,

配置好后就可以忽略一些不想上传的文件


【npm脚本】

细心的同学会发现,最开始npm init的时候有一项是test commad,之前的空的,

现在需要稍作修改,在package.json中修改为:

1
2
3
   "scripts" : {
       "test"  "node test/test.js"
   },

之后就可以执行npm run test,如下

3.png


你也可以添加其他脚本,在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/

猜你喜欢

转载自blog.csdn.net/uikoo9/article/details/79010842