什麼是NPM?
NPM是隨同NodeJS一起安裝的javascript包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:
允許用戶從NPM服務器下載別人編寫的第三方包到本地使用。
允許用戶從NPM服務器下載並安裝別人編寫的命令行程序到本地使用。
允許用戶將自己編寫的包或命令行程序上傳到NPM服務器供別人使用。
發佈前的準備
-
註冊一個npm賬號
前往NPM官網進行註冊 -
創建一個簡單的包
在本地創建一個項目文件夾sugars_demo (名字自己取,不要和NPM上已有的包名重複衝突就好)
然後通過終端進入文件夾(路徑每個人不一樣)
cd sugars_demo
接着可以通過命令創建一個包信息管理文件package.json
npm init
一路回車或根據包的內容來填寫相關信息後,package.json內容大概如下
{
"name": "sugars_demo",
"version": "1.0.0",
"description": "A demo",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": ""
},
"keywords": [
"sugars",
"demo"
],
"author": {
"name": "sugars",
"email": "[email protected]"
},
"license": "MIT"
}
接着在sugars_demo文件夾裏創建一個index.js文件,然後簡單敲幾行代碼
;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
global.moduleName = factory()
}(this, (function () {
var test = {
sayHi: function () {
console.log('hi');
}
};
return test
})))
到這裏一個簡單的包就創建好了。
如果想再完善一下的話,還可以在包根目錄下創建README.md文件,裏面可以寫一些關於包的介紹信息,最後發佈後會展示在NPM官網上。
開始發佈創建好的包
使用終端命令行
如果是第一次發佈包,執行以下命令,然後輸入前面註冊好的NPM賬號,密碼和郵箱,將提示創建成功
npm adduser
如果不是第一次發佈包,執行以下命令進行登錄,同樣輸入NPM賬號,密碼和郵箱
npm login
注意:npm adduser成功的時候默認你已經登陸了,所以不需要再進行npm login了
接着先進入項目文件夾下,然後輸入以下命令進行發佈
npm publish
當終端顯示如下面的信息時,就代表版本號爲1.0.0的包發佈成功啦!前往NPM官網就可以查到你的包了
myMacBook-Pro:sugars_demo sugars$ npm publish
- [email protected]
如果遇到顯示以下信息,比如
npm ERR publish 403
You do not have permission to publish ‘bootstrap’.Are you logged in as
the corrent user?:bootstrap
意思就是你沒有權限發佈名爲“bootstrap”的包,顯然這個鼎鼎有名的包已經有人發佈了,所以你只能另取它名。
更新已經發布的包
更新包的操作和發佈包的操作其實是一樣的
npm publish
但要注意的是,每次更新時,必須修改版本號後才能更新,比如將1.0.0修改爲1.0.1後就能進行更新發布了。
這裏的包版本號有一套規則,採用的是semver(語義化版本),通俗點意思就是版本號:大改.中改.小改
npm login 報錯e409 Conflict
Registry returned 409 for PUT on http://registry.npm.taobao.org/
-/user/org.couchdb.user:666: conflict
npm adduser的時候報 報錯e409 Conflict
Registry returned 409 for PUT on http://registry.npm.taobao.org/-/user/org.couchdb.user:666: conflict
原因
出現這個錯誤最大的可能性是我們把registry選項替換成了淘寶的鏡像
解決方案
npm login --registry http://registry.npmjs.org
npm publish --registry http://registry.npmjs.org
刪除npm
npm unpublish --force //強制刪除
npm unpublish [email protected] //指定版本號
npm deprecate //某些情況