什麼是npm系列:3、如何發佈本身的npm包

讀完本篇文章後,你將學到"開發"、「配置」、"發佈",最終擁有屬於你本身的npm包。node

1. 初始化npm

經過npm init命令能夠建立初始項目,須要逐步完善一下信息:git

package name: (npmtest)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
複製代碼

建立完package.json以後,咱們就能夠轟轟烈烈的寫代碼了。npm

2. 開發Tips

2.1 調試

開發中如何調試是一個痛點,不少人會把代碼複製到node_modules中再調試結果,其實咱們有更好的辦法:"npm link",使用流程以下:json

  1. 在包根目錄執行npm link
  2. 在項目中執行npm link package-name
  3. 這個時候在項目中實時訪問到package-name

目前這種方式在yarn中沒法使用。數組

3. 發佈

3.1 建立/登陸帳號

首先須要在www.npmjs.com/signup註冊帳號。bash

完成以後在終端中執行npm login,輸入帳號密碼以後即登陸成功。svn

這裏有一點須要注意,若是設置過taobao源,須要修改成npm源,使用以下指令還原:post

npm config set registry http://registry.npmjs.org
複製代碼

可是鑑於實際狀況,咱們在taobaonpm源之間互相切換其實太麻煩了,比較好的解決方案就是配置package.json中的publishConfig字段,配置說明看下一段落。測試

3.2 package.json 配置

此次主要介紹:ui

  • publishConfig
  • main
  • files

publishConfig

發佈使用的配置。

"publishConfig": {
    "registry": "https://registry.npmjs.org/",
    "tag": "beta",
    "access": "public"
}
複製代碼
  • registry 源地址
  • tag 發佈對應的dist-tag標籤
  • access 若是是scoped包,必定須要設置爲public(付費帳號除外)

main

包的入口執行文件,一般咱們會指定爲index.js

files

咱們須要控制npm包的大小,避免安裝過程當中花費太多時間。通常來講咱們只輸出編譯過的內容、文檔、樣式等。

package.jsonfiles字段的做用就是控制包含在項目中的內容,它能夠設置爲文件或者文件名組成的數組。

除此以外,咱們還能夠在根目錄或子目錄下建立.npmignore文件,寫法和gitignore一致。

有些文件是沒法忽略的:

  • package.json
  • README
  • CHANGES / CHANGELOG / HISTORY
  • LICENSE / LICENCE
  • NOTICE
  • The file in the "main" field

如下文件是默認忽略的:

  • .git
  • CVS
  • .svn
  • .hg
  • .lock-wscript
  • .wafpickle-N
  • .*.swp
  • .DS_Store
  • ._*
  • npm-debug.log
  • .npmrc
  • node_modules
  • config.gypi
  • *.orig
  • package-lock.json

3.3 版本管理

版本號遵循語義化版本的規則,由MAJOR.MINOR.PATCH組成,在末尾還能夠加上擴展的預發佈版本號信息。

  • MAJOR:當你作了不兼容的 API 修改,
  • MINOR:當你作了向下兼容的功能性新增,
  • PATCH:當你作了向下兼容的問題修正。

版本號能夠手動修改,也能夠經過npm version命令管理:

// 假設當前版本號 v1.0.0

npm version patch
// v1.0.1

npm version prepatch
// v1.0.2-0

npm version minor
// v1.1.0

npm version major
// v2.0.0
複製代碼

npm version的完整命令以下:

npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]
複製代碼

若是咱們要生成1.0.0-alpha.1風格的版本號,能夠帶上參數--preid:

npm version prerelease --preid=alpha
複製代碼

當咱們執行了npm version以後,腳本會自動修改版本號,並在git中建立提交和標籤,若是想要禁用該行爲,能夠傳入--no-git-tag-version來阻止。

3.4 tag

npmtag是用於標記不一樣用途的版本,一個npm包至少會有latest標籤,咱們能夠根據測試版、預覽版等不一樣需求定製標籤。

好比咱們有一個測試版本要發佈,咱們能夠指定dist tagbeta

npm publish --tag beta
複製代碼

當咱們測試完成,準備正式發佈的時候,就能夠把beta對應版本號演進到latest上。

3.5 發佈

當一切準備就緒以後,咱們就能夠進入發包的衝刺了。

npm publish
複製代碼

注意!可能有人說我爲何看到的只有錯誤,通常這個時候能夠這樣排查:

  • registry檢查是否正確
  • 包名是否爲@somescope/somepackagename形式
  • 版本號是否未更新

若是包屬於某個組織下,即@somescope/somepackagename形式的包名,執行命令須要調整爲npm publish --access public

通過千辛萬苦以後,咱們終於發佈成功了,但是若是咱們發現某個文件漏掉了,再發佈一個版本也不太值得,咱們就可使用npm unpublish命令取消24小時以內發佈的包,須要注意的是unpublish並不推薦使用。

4. 最佳實踐

  • semantic-release 自動生成changelog以及版本管理
  • 代碼規範+commit規範 magic-lint
  • cgr 切換npm、yarn源

5. 場景講解

  • 每次發佈操做流程
  • 移除tag

5.1 每次發佈流程

  1. 開發功能,並提交代碼
  2. npm version major or minor or patch
  3. npm publish

5.2 移除tag

npm dist-tag rm <pkg> <tag>
複製代碼

系列彙總

本文同步發表於做者博客: 什麼是npm系列:3、如何發佈本身的npm包

相關文章
相關標籤/搜索