NPM包(模塊)發佈、更新、撤銷發佈

在開始以前,先去註冊一個NPM帳號,若是沒有的話html

◈ 發佈NPM公開包

♢ 建立項目

  1. 建項目文件夾
    先建一個工程文件夾或者拉取遠程git上的已有項目node

    mkdir my-test-project
    複製代碼
  2. 初始化git
    進入該文件夾,先初始化git(若是尚未的話),用於版本控制。在github(也能夠其餘)上新建一個與項目同名的遠程倉庫,並添加README.md文件,拷貝倉庫地址,如:git

    // 拷貝github上的倉庫地址
    git@github.com:username/my-test-project.git
    
    git init
    git remote add origin git@github.com:usename//my-test-project.git
    git push -u origin master
    複製代碼

    這樣就把本地倉庫和遠程倉庫關聯起來了github

  3. 初始化npm
    在項目根目錄下即my-test-project目錄下執行,npm init,而後根據提示填寫相關信息,有些能夠略事後續修改。 要注意的是name字段,有幾個點要提醒:npm

    • 這個是惟一的,不能和npm上全部已有的包重名,不然在publish的時候回會提示權限錯誤
      npm ERR! You do not have permission to publish "my-test-project". 
      Are you logged in as the correct user? : my-test-project
      複製代碼
    • 另外命名也有規範,不能出現下劃線、大寫字母、空格等字符,能夠有連字符(中劃線)
    • 先建立index.js文件,做爲測試,在裏面寫幾行簡單代碼,並export一個默認變量

♢ 發佈

  1. 先登陸npm用戶,執行json

    npm adduser // or npm login
    Username: npm-user-name
    Password:
    Email: your-email
    複製代碼

    根據提示輸入正確的npm用戶名、密碼、郵箱,添加完後會默認登陸bash

  2. 執行post

    npm publish
    複製代碼

    若是沒什麼問題,應該就發佈成功了。能夠去npm搜索發佈的包: my-test-project,或者去本身的npm帳號下查看package測試

♢ 關於測試

  1. publish前測試
    在npm init 完成以後,就能夠做爲一個依賴包供其餘模塊引用。根據上面的例子,把my-test-project文件夾放入另外的測試工程node_modules文件夾下面,這樣就能夠跟引入其餘模塊同樣,引入以前在index.js裏面export的測試變量,如ui

    // my-test-project 下的index.js
    const a = 'this is a test'
    export default a // or module.exports = a
    
    // 引用
    import a from 'my-test-project' // or const a = require('my-test-project')
    複製代碼

    建議先測試完,沒有問題再publish

  2. publish後測試是否有問題
    publish後就更好辦了,直接像安裝其餘模塊同樣經過npm i 命令安裝,而後引用

◈ 更新已發佈的包

更新包和發佈包的命令是同樣的,更新包只需修改package.json裏面的version字段,也可使用npm 自帶的版本控制命令修改版本號,更新的步驟爲:

  1. 修改版本號
  2. npm publish

♢ npm version

npm 提供官方提供了npm version來進行版本控制,其效果跟手動修改package.json裏面的version字段是同樣的,好處在於,能夠在構建過程當中用npm version命令自動修改,並且具備語義化即Semantic versioning.

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

其語義爲:

major:主版本號(大版本)
minor:次版本號(小更新)
patch:補丁號(補丁)
premajor:預備主版本
preminor: 預備次版本
prepatch:預備補丁版本
prerelease:預發佈版本
複製代碼

如初始版本爲 1.0.0,執行相關類型命令後,對應的語意爲:

npm version patch  // 1.0.1 表示小的bug修復
npm version minor // 1.1.0 表示新增一些小功能
npm version mmajor // 2.0.0 表示大的版本或大升級
npm version preminor // 1.1.0-0 後面多了個0,表示預發佈
複製代碼

能夠在當前模塊的package.json裏面看到相應的版本變化

◈ 撤銷發佈

因爲撤銷發佈會讓把要撤銷的包做爲依賴的包不能正常工做,因此npm官方對包的撤銷是有限制的:

  1. 不容許撤銷發佈已經超過24小時的包(unpublish is only allowed with versions published in the last 24 hours
  2. 若是在24小時內確實要撤銷,須要加--force參數
  3. 即便撤銷了發佈的包,再次發佈的時候也不能與以前被撤銷的包的名稱/版本其中之一相同,由於這二者構成的惟一性已經被佔用,官方並無隨着撤銷而刪除

♢ npm unpublish

撤銷發佈的命令爲 npm unpublish

npm unpublish my-test-project
// 報錯
npm ERR! Refusing to delete entire project.
npm ERR! Run with --force to do this.
npm ERR! npm unpublish [<@scope>/]<pkg>[@<version>]

// 加 --force參數從新撤銷發佈
npm unpublish my-test-project --force
npm WARN using --force I sure hope you know what you are doing.
- my-test-project
複製代碼

♢ npm deprecate

npm unpublish的推薦替代命令:

npm deprecate <pkg>[@<version>] <message>
複製代碼

這個命令,並不會在npm上裏撤銷已有的包,但會在任何人嘗試安裝這個包的時候獲得deprecated的警告,例如:

npm deprecate my-test-project 'this package is no longer maintained'
複製代碼

參考:

相關文章
相關標籤/搜索