文章簡介: 一、摘要:什麼是npm? 二、如何發佈一個本身的npm包 三、發佈錯誤集錦javascript
npm是javascript著名的包管理工具,是前端模塊化下的一個標誌性產物 簡單地地說,就是經過npm下載模塊,複用已有的代碼,提升工做效率 和移動端開發中,iOS使用的Cocoapods,Android使用的maven有殊途同歸之妙。前端
發佈包以前你必需要註冊一個npm的帳號java
a、本地建立一個文件夾:例如:z-tool b、執行命令進入目錄: $ cd z-tool c、執行npm init 初始化項目。默認一路回車就行git
sh-neverleave:z-tool neverleave$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (z-tool)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/neverleave/Desktop/z-tool/package.json:
{
"name": "z-tool",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this ok? (yes)
複製代碼
默認字段簡介:
name:發佈的包名,默認是上級文件夾名。不得與如今npm中的包名重複。包名不能有大寫字母/空格/下滑線!
version:你這個包的版本,默認是1.0.0。對於npm包的版本號有着一系列的規則,模塊的版本號採用X.Y.Z的格式,具體體現爲:
一、修復bug,小改動,增長z。
二、增長新特性,可向後兼容,增長y
三、有很大的改動,沒法向下兼容,增長x
description:項目簡介
mian:入口文件,默認是Index.js,能夠修改爲本身的文件
scripts:包含各類腳本執行命令
test:測試命令。
author:寫本身的帳號名
license:這個直接回車,開源文件協議吧,也能夠是MIT,看須要吧。
複製代碼
d、在z-tool文件夾中建立一個文件名爲index.js的文件,簡單的寫了一下內容。npm
!function(){
console.log(`這是引入的包入口`)
}()
複製代碼
在終端輸入npm adduser,提示輸入帳號,密碼和郵箱,而後將提示建立成功,具體以下圖。 【注意】npm adduser成功的時候默認你已經登錄了,因此可跳過第四步。 json
最後一行顯示登陸信息,as 後面是用戶名。on 後是源地址,若是不是https://registry.npmjs.org/,好比是淘寶源,請切換。能夠參考: segmentfault.com/a/119000000…在終端輸入npm login,而後輸入你建立的帳號和密碼,和郵箱,登錄,結果同步驟三。segmentfault
成功發佈:bash
sh-neverleave:z-tool neverleave$ npm publish
+ z-tool@1.0.1
複製代碼
注意:若是項目裏有部分私密的代碼不想發佈到npm上,能夠將它寫入.gitignore 或.npmignore中,上傳就會被忽略了微信
到npm官網全局搜索便可maven
和其餘包使用方式一致,具體使用能夠看源碼介紹或者README.md。
終端執行 npm unpublish 例如: 一、npm unpublish z-tool@1.0.0 刪除某個版本 二、npm unpublish z-tool --force 刪除整個npm市場的包
不過撤包推薦用法: npm unpublish的推薦替代命令:npm deprecate [@] 使用這個命令,並不會在社區裏撤銷你已有的包,但會在任何人嘗試安裝這個包的時候獲得警告 例如:npm deprecate z-tool '這個包我已經再也不維護了喲~'
【注意】若是報權限方面的錯,加上--force
一、須要提升版本號
#一、發包 npm publish 失敗
sh-neverleave:z-tool neverleave$ npm publish
npm ERR! publish Failed PUT 400
npm ERR! code E400
npm ERR! deprecations must be strings : z-tool
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/neverleave/.npm/_logs/2018-11-23T10_52_01_742Z-debug.log
sh-neverleave:z-tool neverleave$ npm publish
#二、發包 npm publish 失敗
sh-neverleave:z-tool neverleave$ npm publish
npm ERR! publish Failed PUT 403
npm ERR! code E403
npm ERR! You cannot publish over the previously published versions: 1.0.3. : z-tool
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/neverleave/.npm/_logs/2018-11-23T11_24_57_662Z-debug.log
sh-neverleave:z-tool neverleave$
複製代碼
二、發包 npm publish 失敗 解決方案:終端執行: npm publish --access public
參考:stackoverflow.com/questions/5…
#一、發包 npm publish 失敗
sh-neverleave:npm neverleave$ npm publish
npm ERR! publish Failed PUT 400
npm ERR! code E400
npm ERR! unscoped packages cannot be private : z-tool
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/neverleave/.npm/_logs/2018-11-23T08_44_21_310Z-debug.log
sh-neverleave:npm neverleave$
#解決方案:終端執行: npm publish --access public
sh-neverleave:npm neverleave$ npm publish --access public
+ z-tool@1.0.0
sh-neverleave:npm neverleave$
複製代碼
三、確保登陸的用戶帳號正確
sh-neverleave:npm neverleave$ npm publish
npm ERR! publish Failed PUT 404
npm ERR! code E404
npm ERR! 404 User not found : z-tool
npm ERR! 404
npm ERR! 404 'z-tool' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/neverleave/.npm/_logs/2018-11-23T07_32_28_518Z-debug.log
複製代碼
四、登陸時須要在username 前加‘~’,具體你們能夠驗證
sh-neverleave:npm neverleave$ npm login
Username: (~neverleave) neverleave
Password: (<default hidden>)
Email: (this IS public) (1063588359@qq.com)
npm ERR! code EAUTHIP
npm ERR! Unable to authenticate, need: Basic
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/neverleave/.npm/_logs/2018-11-23T07_27_50_877Z-debug.log
sh-neverleave:npm neverleave$
複製代碼
五、無權限刪除線上的包(撤包有時間限制,24小時) 解決方案:加上 --force
sh-neverleave:z-tool neverleave$ npm unpublish z-tool
npm ERR! Refusing to delete entire project.
npm ERR! Run with --force to do this.
npm ERR! npm unpublish [<@scope>/]<pkg>[@<version>]
sh-neverleave:z-tool neverleave$
#解決方案(內部有被鄙視的話,😄 I sure hope you know what you are doing.)
sh-neverleave:z-tool neverleave$ npm unpublish z-tool --force
npm WARN using --force I sure hope you know what you are doing.
- z-tool
sh-neverleave:z-tool neverleave$
複製代碼
六、刪除npm市場的包同名的24小時後才能從新發布
sh-neverleave:z-tool neverleave$ npm publish
npm ERR! publish Failed PUT 403
npm ERR! code E403
npm ERR! z-tool cannot be republished until 24 hours have passed. : z-tool
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/neverleave/.npm/_logs/2018-11-23T11_41_24_086Z-debug.log
sh-neverleave:z-tool neverleave$
複製代碼
完結
關注微信公衆號,提高綜合技能