npm發佈包教程(一):從npm說起

作爲一個前端,每個人應該對npm install這個命令應該非常熟悉了,尤其是對這個命令執行過程中命令窗口瘋狂輸出肯定印象深刻。我發現有的同學對安裝包輕車熟路,但對包從哪裏來的以及如何發佈一個npm並不是很瞭解,基於此,在團隊內部做了一次分享,將分享過程整理如下,希望對每一個想發佈自己的包但又不知從何開始的同學有所幫助。

由於發佈包涉及到發佈、安裝、更新、刪除/廢棄等階段,寫在一篇文章中篇幅過長,決定拆開做成一個系列。今天第一篇首先介紹一下npm相關的一些知識。

npm(node package manager)

  • 是一個輔助前端開發的包管理工具
  • 包括:

    • 網站:找包、註冊用戶
    • 命令行:程序員與npm交互的主要形式
    • 倉庫:最大的JavaScript軟件庫
  • 管理對象:包(package)
  • 管理方式:

    • 增(發佈:npm publish;安裝:npm i)
    • 刪(廢棄:npm deprecate;卸載:npm rm)
    • 改(更新:npm up)
    • 查(搜索:npm s)

npm中涉及到的主體主要有兩個:packagemodule,定義如下:

  • package:含有package.json描述文件發佈到npm倉庫的文件或者文件夾
  • module:在node_modules中,可以被Node.js的require()方法加載的任何文件或文件夾

可以這樣理解:一個JavaScript軟件,從本地發佈到npm倉庫時是package,從npm倉庫下載到本地時就變成了module

另外,基於以上,可以看出package和module的關係:

  • module不一定是package(比如node內置模塊),package一定是module
  • 含package.json文件的module一定是package

除了以上概念外,再分別看下兩個主體中的細節部分:

package(包)

主要有兩個重要的屬性:

1.Scope(作用域,範圍)

一旦註冊個人或者團體賬戶,就獲得了與個人或者團體名相匹配的scope,可以用這個scope作爲包的命名空間,例如@yuyy、@58。

分類:

  • unscoped:例如babel
  • scoped

    • user: 例如@yuyy/babel
    • org:@babel/parser

作用:爲你自己發佈的包提供命名空間,防止與他人的包名衝突

2.Accessibility(可訪問性)

屬性值有:

  • private:私有,僅作者本人或團隊成員可見
  • public:公有,所有人可見

此屬性和github創建倉庫時設定訪問性的策略一致:公有,所有人可見,免費;私有,僅自己可見,收費。

以上兩個屬性之間的關係如下:

clipboard.png

需要說明的幾點:

  • 個人賬戶(User)可以創建和管理Unscoped的package;團隊賬戶(Org)相互只能管理Scoped的package
  • Unscoped總是public
  • Private的package總是Scoped
  • Scoped的package默認Private,但需要付費,可以通過命令行改變其屬性

module(模塊)

下載到本地的module主要是用於在node環境被引用,爲了能被Node.js的require()方法加載,module必須是下列情況之一:

  • 包含package.json,且package.json中有main字段的文件夾
  • 含有index.js的文件夾
  • JavaScript文件

以上都是一些npm相關的知識,在下一篇《npm發佈包教程(二):發佈包》中,我們開始演示發佈npm包的實際操作過程。

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