1. 程式人生 > >手把手教你玩轉npm包

手把手教你玩轉npm包

【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/