如何發佈第一個屬於自己的npm包

什麼是NPM?
NPM是隨同NodeJS一起安裝的javascript包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:

允許用戶從NPM服務器下載別人編寫的第三方包到本地使用。
允許用戶從NPM服務器下載並安裝別人編寫的命令行程序到本地使用。
允許用戶將自己編寫的包或命令行程序上傳到NPM服務器供別人使用。

發佈前的準備

  1. 註冊一個npm賬號
    https://www.npmjs.com/signup
    前往NPM官網進行註冊

  2. 創建一個簡單的包
    在本地創建一個項目文件夾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

如果遇到顯示以下信息,比如

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包的版本號規則
一個版本號分爲三個部分:X.Y.Z

X 表示主版本號。當你做了重大修改導致新版本不兼容舊的代碼時,就需要更新主版本號;
Y 表示次版本號。當你添加了新的功能, 但沒有破壞原有的功能,就需要更新次版本號;
Z 表示補丁更新。當你只是簡單的修復了BUG,沒有做任何新功能的添加,或者舊功能的修改,就需要更新補丁;
此規則對包管理和使用非常重要,請嚴格按照規則執行。

可手動更改版本號
使用命令更新,如下:

npm version patch	//第三位增1。一共三位數字 "1.0.0"
npm version minor	//第二位增1
npm version major	//第一位增1

npm上傳白名單
在 package.json 文件添加如下代碼,表示:

上傳文件包括 src/ | demo/ | index.js
始終上傳 README.md | package.json | LICENSE

"files": [
    "src",
    "demo",
    "index.js"
]

npm上傳黑名單(忽略文件)
在項目根目錄創建文件 .npmignore 忽略規則同 .gitignore。在這裏定義的文件即使在白名單裏存在,也同樣會被忽略,如下: demo 文件夾下面的所有文件將會被忽略

/demo

npm包的刪除與棄用
只有在發包的24小時內才允許撤銷發佈的包

npm unpublish
棄用特定版本以及版本範圍

npm deprecate [@]

常見錯誤:
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

{
  // 包的名稱
  "name": "sg-utils",
  // 包的版本號
  "version": "1.4.6", 
  // 包的描述
  "description": "javascript通用工具類", 
  // 包的入口文件
  "main": "index.js", 
  // 上傳npm的白名單,即被允許上傳的文件
  "files": [ 
    "src",
    "demo",
    "index.js"
  ],
  // 指定了運行腳本命令的npm命令行縮寫
  "scripts": {
    "start": "node server.js"
  },
  // 遠程代碼倉庫
  "repository": {
    "type": "git",
    "url": "https://github.com/shiguang0116/sg-utils"
  },
  // 關鍵字
  "keywords": [
    "javascript",
    "util"
  ],
  // 作者
  "author": "guang.shi",
  // 許可證數組
  "license": "ISC",
  // 提交bug的地址
  "bugs": {
    "url": "https://github.com/shiguang0116/sg-utils/issues"
  },
  // 包的主頁
  "homepage": "https://github.com/shiguang0116/sg-utils#readme",
  // 運行引擎,指明node.js運行所需要的版本
  "engines": {
    "node": ">= 6.0.0",
    "npm": ">= 3.0.0"
  },
  // 開發環境的依賴包列表
  "devDependencies": {
    "eslint": "^5.16.0",
    "eslint-config-vui": "^0.2.7",
    "eslint-plugin-html": "^5.0.5"
  },
  // 生產環境的依賴包列表
  "dependencies": {},
  // 依賴包列表
  "peerDependencies": {}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章