1. 程式人生 > >用node發布一個包

用node發布一個包

技術 src 修改 倉庫 準備工作 sum 簡單的 放心 read

手把手教你用npm發布一個包

技術分享 註:本文引用於簡書 http://www.jianshu.com/p/36d3e0e00157

但是內容的話,還是一樣的,也就是繼續之前的工作,將那個autoRoutes給完善起來。
之前我們已經實現了路由的自動化構建,但是我們可以看到,一大串代碼懟在裏面,不美觀對不對,一點都不愉♂悅。當然你也可以說,把它封裝在一個.js文件裏面,然後使用require(‘./autoRoute.js‘)給引入進來,那也行。
但是,為什麽不把心放大一點呢?比如說,我們把它做成一個npm包!

預備工作

既然要作為一個npm包,那麽我們就要先把我們的代碼封裝好。這一步跟封裝在一個.js文件裏面是一樣的。
而且,為了讓我的包看起來比較高大上,或者說,對比其他人寫的包要有用一點(至少我覺得我這個代碼是很簡單的,比不過人家直接修改express的屬性方法的代碼)

所以我覺定給這個包綁上一個自動渲染成接口文檔的功能。嘿嘿嘿。
暴露數據的接口,在原代碼裏面已經有了,所以這裏就把模板寫好吧,我就給使用者提供一個渲染的數據模板。
利用餓了麽前端發布的開源框架ElementUI,我快速的搭了接口文檔的界面。然後提供一個數據模板:

技術分享
接口文檔界面


之前我的確也搭過一個。。。不過為了追求時髦值,果斷換框架。
然後把數據模板規範化:

info:{
    name:‘To get...‘,//接口的名字
    summary:‘something‘,//接口的摘要信息
    content:[//接口的主要內容
        {
            title:‘Query‘,//小節標題,
            summary:‘some words‘,//小節摘要信息
            warn:‘some words‘,//小節的警告信息
            table:{//創建小節表格
                thead:[‘Attribute‘,‘Type‘,‘Info‘],//表格頭
                tbody:[//表格數據
                    [‘type‘,‘String‘,‘this attribute have two value.One is....‘]
                ]
            }
        }
    ],
    test:{//提供測試數據
        query:{//url的search參數
            "type":"nomal",
        },
        data:{//用於測試的post data數據
            "post":"123456"
        },
        text:‘some words‘//有關測試的一些內容說明文本
    }
}

是不是看起來很規整啊?
在寫接口的同時寫文檔,然後文檔的格式又如此貼心,換我早就感激涕零了。
恩恩,就先這樣。然後,關於我封裝那個.js我這裏就不貼代碼了好吧,想要看的,你直接npm install express-dir-route,或者直接看源碼
那麽,準備工作做好了,是時候.....

老板,來個npm賬號!

因為你的包是要放在npm上的,所以,沒有npm的賬號,根本什麽活都幹不了。
在npm上註冊一個賬號是很簡單的,隨便填一下用戶名密碼郵箱,然後人家就會發個郵件給你,然後就註冊成功了。。。這個是我註冊後的樣子:

技術分享
npm


有了賬號之後,你就可以執行npm publish這個操作了。不過,還沒完。上面這些基本上都是湊字數的,接下來才是真正的教程。。。。

npm init

選擇一個文件夾,然後用命令行cd進去,如圖所示:

技術分享
Paste_Image.png


然後,執行npm init,如圖所示:

技術分享
Paste_Image.png

接下來就是一長串表單:

  • name:填寫你這個包的名字,默認是你這個文件夾的名字。不過這裏要著重說一下,最好先去npm上找一下有沒有同名的包。最好的測試方式就是,在命令行裏面輸入npm install 你要取的名字,如果報錯,那麽很好,npm上沒有跟你同名的包,你可以放心大膽地把包發布出去。如果成功下載下來了。。。那麽很不幸,改名字吧。。。
  • version:你這個包的版本,默認是1.0.0
  • description:其實我也不知道是什麽,按回車就好了。。。,這個用一句話描述你的包是幹嘛用的,比如我就直接:‘a plugin for express.register routes base on file path’
  • entry point:入口文件,默認是Index.js,你也可以自己填寫你自己的文件名
  • test command:測試命令,這個直接回車就好了,因為目前還不需要這個。
  • git repository:這個是git倉庫地址,如果你的包是先放到github上或者其他git倉庫裏,這時候你的文件夾裏面會存在一個隱藏的.git目錄,npm會讀到這個目錄作為這一項的默認值。如果沒有的話,直接回車繼續。
  • keyword:這個是一個重點,這個關系到有多少人會搜到你的npm包。盡量使用貼切的關鍵字作為這個包的索引。我這個包嘛,第一是在express下工作的,然後又是一個插件plugin,然後又是一個註冊路由route用的,而這個路由又是基於文件目錄dir,所以很好就得出我的包的索引關鍵字。
  • author:寫你的賬號或者你的github賬號吧
  • license:這個直接回車,開源文件來著。。。
    然後它就會問你Are you ok?
    技術分享
    Paste_Image.png
    回車Ok!
    然後我們回到我們的文件目錄裏面去看一看,發現多出來一個package.json文件,點進去基本上就是上面這張圖輸出的信息。

然後,在目錄下新建一個index.js文件,或者你剛才修改了那個entry point的值,那麽你這個文件名也跟著改為那個值。
就像這個樣子:

技術分享
Paste_Image.png


因為我把封裝好的代碼都扔在lib裏面,所以,index.js裏面也就一句話:

module.exports=require(‘./lib‘)

不要問我為什麽要這麽做,因為你npm install其他包的時候,其他包裏面的也是這樣寫的。。。。

然後,最重要的,寫好README.md,一個給大家描述你的包的markdown文件,如果大家都不知道你的代碼是做什麽的,會有人去下載你的代碼嗎?哦,對了,最好寫英文。我這裏寫了一套英文版的使用文檔和一套中文版的使用文檔。

然後,npm init的工作做完了。
接下來就是:用npm命令登陸一下:

技術分享
Paste_Image.png


如果你對password是空的感到疑惑的話,不用緊張,命令行輸入密碼是不會顯示的。
然後,在你的目錄下使用npm publish
就像這樣:

技術分享
Paste_Image.png


這裏因為我已經發布過了,而且version版本沒有改變,所以這裏npm會給我報錯。一般情況下,一旦你要修改你已經發布後的代碼,然後又要執行發布操作,務必到package.json裏面,把version改一下,比如從1.0.0改為1.0.1,然後在執行npm publish,這樣就可以成功發布了。

看看我們發布的包

這裏先使用npm install 你發布出去的包的名字,然後看看命令行裏面是不是把你的包下載了下來。如果下載成功,就說明你的包已經成功地發布在npm上了。
或者你親自上npm這個網站(該帶梯子的請自帶梯子),然後在搜索框裏面輸入你剛才寫下來的關鍵字。。。不過,如果你的包的星星(點贊)數量不夠的話應該會排到很尾。。。所以我建議你用包名直接搜(反正我用關鍵字找找不到我的包。。。)

技術分享
Paste_Image.png


看,第一個就是我發布的包。。。短短四天時間內已經57星了。。。。

就這樣啦。。。


======2016-12-2 14:44:29補充==========
對了,忘記說了一件事,就是有關於測試npm包的問題。
在你執行完npm init這個步驟之後,你把代碼扔進這個包裏面後,就形成了一個本地的包,可以直接把這個包扔到項目裏面node_module這個文件夾裏面的,然後在你的項目裏面就可以直接:

  var a=require(‘你的包名‘);

直接使用包名引入,不用文件路徑了,就像引入fs或者http模塊一樣
測試完確定沒有什麽bug之後再執行npm publish

用node發布一個包