npm發佈包教程(一):從npm提及

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

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

1、npm(node package manager)

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

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

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

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

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

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

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

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

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

2、package(包)

主要有兩個重要的屬性:babel

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,但須要付費,能夠經過命令行改變其屬性

3、module(模塊)

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

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

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

相關文章:
1.《npm發佈包教程(一):從npm提及》
2.《npm發佈包教程(二):發佈包》
3.《npm發佈包教程(三):安裝發佈包》
4.《npm發佈包教程(四):迭代》
5.《npm發佈包教程(五):廢棄/刪除》

相關文章
相關標籤/搜索