PREV POST JavaScript 取得各瀏覽器捲軸寬度
PUBLIC DATE:2019.11.13
B-1120196創建 npm 項目
使用 npm 前,需先下載安裝 node.js 並檢查 npm 已更新到最新版本。
運行 npm init 用來初始化生成一個新的 package.json 文件。
$ npm init -y
npm 常用 CLI
以下為 npm 平時常用的 CLI,並非所有。更多 CLI 請查閱:npm CLI。
01. | npm [version/-v] 當前項目的版本號。 |
02. | npm init [--yes/-y] 互動式創建 / 更新 package.json 文件。 ※ --yes/-y:以默認值生成 package.json 文件。 |
03. | npm install 添加所有 package.json 中的依賴包。 |
04. | npm install [package] [--save-dev/-D] 添加依賴包。 ※ --dev / -D:為開發或測試環境。 |
05. | npm install --package-lock 生成鎖定文件。 |
06. | npm uninstall [package] 移除依賴包,並更新 package.json 和 yarn.lock。 |
07. | npm update 升級所有 package.json 中的依賴包。 |
08. | npm update [package] 升級依賴包。 |
09. | npm ls [--depth] 列出已安裝依賴包。 ※ --depth=0:列表深度,從0開始。 |
10. | npm outdated [package] 檢查過時的依賴包。 |
11. | npm run [scripts] 運行 package.json 中預定義的 scripts 腳本。 |
12. | npm cache [add/clear/verify] 操作緩存。 ※ 添加:`add`;清除緩存:`clean`;驗證:`verify` |
創建包
包是在模塊基礎上更深一步的抽象,node.js 的包類似於 C/C++ 的函數庫或者 Java、.Net 的類庫。它將某個獨立的功能封裝起來,用於發布、更新、依賴管理和版本控制。 node.js 根據 CommonJS 規範實現了包機制,開發了 npm 來解決包的發布和獲取需求。
node.js 的包是一個目錄,其中包含了一個 JSON 格式的包說明文件 package.json。嚴格符合 CommonJS 規範的包應該具備以下特徵:
1. package.json 必須在包的頂層目錄下。
2. 二進製文件應該在 bin 目錄下。
3. JavaScript 代碼應該在 lib 目錄下。
4. 文檔應該在 doc 目錄下。
5. 單元測試應該在 test 目錄下。
node.js 對包的要求並沒有這麼嚴格,只要頂層目錄下有 package.json,並符合一些規範即可。當然為了提高兼容性,我們還是建議你在製作包的時候,嚴格遵守 CommonJS 規範。
我們也可以把文件夾封裝為一個模塊,即所謂的包。包通常是一些模塊的集合,在模塊的基礎上提供了更高層的抽象,相當於提供了一些固定接口的函數庫。通過定制 package.json,我們可以創建更複雜,更完善,更符合規範的包用於發布。
node.js 在調用某個包時,會首先檢查包中 packgage.json 文件的 main 字段,將其作為包的接口模塊,如果 package.json 或 main 字段不存在,會嘗試尋找index.js 或 index.node 作為包的接口。
package.json 是 CommonJS 規定的用來描述包的文件,完全符合規範的 package.json 文件應該含有以下字段:
01. | name package.json 中最重要的屬性是 name 和 version 兩個屬性,這兩個屬性是必須要有的,否則模塊就無法被安裝,這兩個屬性一起形成了一個 npm 模塊的唯一標識符。模塊中內容變更的同時,模塊版本也應該一起變化。包的名字,必須是唯一的,由小寫英文字母、數字和下劃線組成,不能包含空格。 |
02. | version version 必須可以被 npm 依賴的一個 node-semver 模塊解析。符合語義化版本識別規範的版本字符串。 |
03. | description 包的簡要說明。方便別人了解你的模塊作用,搜索的時候也有用。 |
04. | keywords 一個字符串數組,方便別人搜索到本模塊。 |
05. | homepage 項目主頁url。 注意:這個項目主頁 url 和 url 屬性不同,如果你填寫了 url 屬性,npm 註冊工具會認為你把項目發佈到其他地方了,獲取模塊的時候不會從 npm 官方倉庫獲取,而是會重定向到 url 屬性配置的地址。 |
06. | bugs 提交 bug 的地址,可以是網址或者電子郵件地址,被你的模塊坑到的人可以通過這裡吐槽。 |
07. | license 許可證數組,每個元素要包含 type(許可證的名稱)和 url(鏈接到許可證文本的地址)字段。你應該為你的模塊制定一個協議,讓用戶知道他們有何權限來使用你的模塊,以及使用該模塊有哪些限制。最簡單的,例如你用 BSD-3-Clause 或 MIT 之類的協議。可以在 SPDX 這個地址查閱協議列表。 |
08. | maintainers 維護者數組,每個元素要包含 name 、email(可選)、web(可選)字段。 |
09. | contributors 貢獻者數組,格式與 maintainers 相同。包的作者應該是貢獻者數組的第一個元素。 |
10. | repository 倉庫託管地址數組,每個元素要包含 type(倉庫的類型,如 git)、url(倉庫的地址)和 path(相對於倉庫的路徑,可選)字段。 |
11. | dependencies 包的依賴,一個關聯數組,由包名稱和版本號組成。dependencies 屬性是一個對象,配置模塊依賴的模塊列表,key 是模塊名稱,value 是版本範圍,版本範圍是一個字符,可以被一個或多個空格分割。dependencies 也可以被指定為一個 git 地址或者一個壓縮包地址。不要把測試工具或 transpilers 寫到 dependencies 中。 |
發佈包
通過使用 npm init 可以根據交互式回答產生一個符合標準的 package.json。創建一個 index.js 作為包的接口,一個簡單的包就製作完成了。在發布前,我們還需要獲得一個帳號用於今後維護自己的包,使用 npm adduser 根據提示完成帳號的創建完成後可以使用 npm whoami 檢測是否已經取得了帳號。接下來,在 package.json 所在目錄下運行 npm publish,稍等片刻就可以完成發布了,打開瀏覽器,訪問 npm 搜尋就可以找到自己剛剛發布的包了。
現在我們可以在世界的任意一台計算機上使用 npm install [包名稱] 命令來安裝它。
如果你的包將來有更新,只需要在 package.json 文件中修改 version 字段,然後重新使用 npm publish 命令就行了。如果你對已發布的包不滿意,可以使用 npm unpublish 命令來取消發布。