前因:之前在cordova 添加插件的時(shí)候遇到一個(gè)問題 就是 插件與新版本XCode(依賴庫有刪減)存在不兼容的問題,但插件作者其實(shí)已在gitHub 上更新該插件版本, 只是并未更新到npm上,所以有把項(xiàng)目clone下來發(fā)布到自己的npm賬戶的想法,特此記錄操作流程,以便后續(xù)在遇到此問題時(shí)候查看。
首先需要到npm 官網(wǎng)?https://www.npmjs.com/signup 注冊(cè)一個(gè)賬號(hào), 如果有賬號(hào)了可直接在命令行登錄 ,?

登錄的時(shí)候一定要確認(rèn)自己當(dāng)前npm鏡像源是npm的()而不是淘寶的鏡像
npm config get registry
npm config set registry=http://registry.npmjs.org
上傳完后可設(shè)置回淘寶鏡像(cnpm 命令),方便下載依賴庫 (注意:從淘寶鏡像安裝所有模塊時(shí),當(dāng)發(fā)現(xiàn)模塊還沒同步過來,cnpm 會(huì)自動(dòng)在后臺(tái)與npm 合并, 第一次會(huì)直接從npm源下載,后續(xù)在安裝就直接從淘寶源直接下載安裝)
npm config set registry?http://registry.npm.taobao.org/

網(wǎng)上有樓主說用npm的賬號(hào)登錄淘寶鏡像會(huì)報(bào)網(wǎng)絡(luò)錯(cuò)誤,我測試了下,其實(shí)是可以登錄的,只是登錄的是cnpm的鏡像,所以想要上傳到npm,必須切換到npm鏡像

接下來就是在本地創(chuàng)建項(xiàng)目了:
? 選擇一個(gè)文件夾目錄:在終端進(jìn)入該文件夾目錄,執(zhí)行npm init 命令
執(zhí)行該命令,接著依次填寫,不想填寫的直接回車,也可以后續(xù)到 package.json 配置文件中修改這些配置
1.name 模塊名,該名稱需要在npm 上是唯一的,之后用戶通過 npm install "當(dāng)前模塊名來引用該庫",所以在定義的時(shí)候可以到?https://www.npmjs.com/?去查詢是否存在當(dāng)前名字的包
2.version 版本號(hào),語義版本號(hào)分為X.Y.Z 三位,代表主版本號(hào),次版本號(hào)和補(bǔ)丁版本號(hào),
所以當(dāng)庫更新時(shí),版本號(hào)應(yīng)按以下原則更新
????a. 如果只是修復(fù)bug,需要更新Z位。
????b. 如果是新增了功能,但是向下兼容,需要更新Y位。
????c. 如果有大變動(dòng),向下不兼容,需要更新X位。
3.?description 介紹自己的模塊
4. main 入口文件,必要, 當(dāng)通過require 或 import 時(shí),是讀取main 里聲明的文件
5.test command? 測試命令? (給出庫的一些可測試的信息)
6.git repository git 倉庫地址
7.keywords? 關(guān)鍵詞,可通過npm搜索這些關(guān)鍵詞找到你的庫
8.author 作者信息 該庫的開發(fā)者信息
9.license: 代碼授權(quán)? (例如 Apache 2.0? 或 MIT 等協(xié)議)
執(zhí)行完上面命令,可在文件夾中生成一個(gè)package.json 的文件

接下來就可以在該目錄編寫自己的代碼,或者把別人庫文件拿進(jìn)來修改
最后:發(fā)布模塊? 在當(dāng)前命令直接執(zhí)行 npm publish? 即可直接上傳
有文章說:? npm 將包發(fā)布為公共包,npm修改發(fā)包模式分為私有包和公共包,需要添加–access public命令,不然會(huì)報(bào)錯(cuò) 我發(fā)布的時(shí)候,并不存在這個(gè)問題,大家可以酌情選擇
庫升級(jí)攻略:發(fā)布完之后想升級(jí)庫,步驟如下:
? ? ? a.使用 npm view "庫名" versions 查看遠(yuǎn)端版本, 修改包內(nèi)容,修改后作為新版本進(jìn)行提交
? ? ? b. 修改版本號(hào):使用npm version <update_type> 進(jìn)行修改,update_type 有三個(gè)參數(shù): patch: 這個(gè)是補(bǔ)丁的意思 / minor: 這個(gè)是小版本修改 / major: 這個(gè)是大版本修改
? ? ? ?實(shí)例:? 如 1.0.1? npm version patch??????????????????????????????????????????????????????????????????????????
? ? ? ? ? ? ? ? ? ? 如 1.1.0 npm version minor
? ? ? ? ? ? ? ? ? ? 如 2.0.0 npm version major
? ? ? ? ?修改好后 還得? 直接 npm publish 上傳到遠(yuǎn)端, 就算完成
npm 部分命令 :
? ? a.? npm update "包名" 用于更新node_modules子目錄對(duì)應(yīng)模塊更新到最新版本
? ? b. npm cache clear 可以清空 npm 本地緩存,用于處理庫版本未更新,但代碼更新的情況
? ?c. npm unpublish "包名"@版本號(hào)? 可以撤銷自己發(fā)布過的某個(gè)版本代碼 (但npm 只能刪除發(fā)布24小時(shí)內(nèi)的包,發(fā)布超過24小時(shí)的 可以發(fā)布一個(gè)新版本 里面為空文件,覆蓋以前的包, 然后執(zhí)行npm deprecate my-thing@"< 最新版本號(hào)")? 大家如要更詳細(xì)可自行百度,這里只做記錄