1.npm用途說明
我們在寫node.js項目的時候npm工具是避免不的,那么我們如何使用該工具去管理包文具呢?首先我們先介紹npm工具的幾種用途:
- 可以從npm服務器下載別人編寫的第三方包到本地使用。
- 可以從npm服務器下載并安裝別人編寫的命令行程序到本地使用。
- 可以將自己編寫的包或命令行程序上傳到npm服務器供別人使用。
2.npm的安裝及使用
2.1 npm安裝
node.js很早的版本就已經集成了npm工具,如果你安裝好了node.js,那就不用單獨安裝npm。我們通過"npm -v”來查看以下版本:
$ npm -v
6.13.4
如果你想使用新的npm版本,可以使用如下命令來更新:
sudo npm install npm -g # Linux平臺npm install npm -g # windows平臺
你也可以使用國內淘寶鏡像源更新或者下載包:
npm install -g cnpm --registry=https://registry.npmmirror.com
2 npm使用
如果我們要使用npm 命令安裝urllib,我們可以用下邊命令:
npm install urllib # 本地安裝
npm install usllib -g # 全局安裝
2.2.1 本地安裝
將安裝包放在 ./node_modules 下(運行 npm 命令時所在的目錄),如果沒有 node_modules 目錄,會在當前執行 npm 命令的目錄下生成 node_modules 目錄。
npm install urllib # 本地安裝
2.2.2 全局安裝
將安裝包放在 /usr/local 下或者你 node 的安裝目錄。
npm install usllib -g # 全局安裝
2.2.3 模塊卸載
$ npm uninstall usllib
2.2.4 模塊更新
$ npm update usllib
2.2.5 模塊搜索
$ npm search usllib
2.2.6 模塊創建
創建模塊,package.json 文件是必不可少的。我們可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的結果。
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.See `npm help json` for definitive documentation on these fields
and exactly what they do.Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.Press ^C at any time to quit.
name: (node_modules) runoob # 模塊名
version: (1.0.0)
description: Node.js 測試模塊(www.runoob.com) # 描述
entry point: (index.js)
test command: make test
git repository: https://github.com/runoob/runoob.git # Github 地址
keywords:
author:
license: (ISC)
About to write to ……/node_modules/package.json: # 生成地址{"name": "runoob","version": "1.0.0","description": "Node.js 測試模塊(www.runoob.com)",……
}Is this ok? (yes) yes
以上的信息,你需要根據你自己的情況輸入。在最后輸入 “yes” 后會生成 package.json 文件。
接下來我們可以使用以下命令在 npm 資源庫中注冊用戶(使用郵箱注冊):
$ npm adduser
Username: myname
Password:
Email: (this IS public) myname@email.com
接下來我們就用以下命令來發布模塊:
$ npm publish
如果你以上的步驟都操作正確,你就可以跟其他模塊一樣使用 npm 來安裝。
2.2.7 模塊創建
語義版本號分為X.Y.Z三位,分別代表主版本號、次版本號和補丁版本號。當代碼變更時,版本號按以下原則更新。
如果只是修復bug,需要更新Z位。
如果是新增了功能,但是向下兼容,需要更新Y位。
如果有大變動,向下不兼容,需要更新X位。
版本號有了這個保證后,在申明第三方包依賴時,除了可依賴于一個固定版本號外,還可依賴于某個范圍的版本號。例如"argv": "0.0.x"表示依賴于0.0.x系列的最新版argv。
NPM支持的所有版本號范圍指定方式可以查看官方文檔。
2.3 查看安裝信息
可以使用以下命令來查看所有全局安裝的模塊:
$ npm list urllib #(在本地項目查看rullib)
root@ /home/kyland/webviz
└── (empty)$ npm list urllib -g #(在全局查看rullib)
/home/kyland/.nvm/versions/node/v10.19.0/lib
└─┬ cnpm@9.2.0├─┬ npm-request@1.0.0│ └── urllib@2.41.0 ├─┬ npminstall@7.11.1│ └── urllib@3.19.3 deduped└── urllib@3.19.3
$ npm list -g
.nvm/versions/node/v10.19.0/lib
├─┬ @angular/cli@17.0.1
│ ├─┬ @angular-devkit/architect@0.1700.1
│ │ ├── @angular-devkit/core@17.0.1 deduped
│ │ └─┬ rxjs@7.8.1
│ │ └── tslib@2.6.2
│ ├─┬ @angular-devkit/core@17.0.1
│ │ ├─┬ ajv@8.12.0
│ │ │ ├── fast-deep-equal@3.1.3
│ │ │ ├── json-schema-traverse@1.0.0
│ │ │ ├── require-from-string@2.0.2
│ │ │ └─┬ uri-js@4.4.1
│ │ │ └── punycode@2.3.1
│ │ ├─┬ ajv-formats@2.1.1
│ │ │ └── ajv@8.12.0 deduped
│ │ ├── jsonc-parser@3.2.0 deduped
│ │ ├── picomatch@3.0.1
│ │ ├── rxjs@7.8.1 deduped
│ │ └── source-map@0.7.4
...
2.4 package.json的使用
package.json 位于模塊的目錄下,用于定義包的屬性。接下來讓我們來看下 express 包的 package.json 文件,位于 node_modules/express/package.json 內容:
{"name": "root","private": true,"devDependencies": {"@babel/cli": "^7.1.5","@babel/core": "^7.2.0","@babel/plugin-proposal-class-properties": "^7.2.1","@babel/plugin-proposal-nullish-coalescing-operator": "^7.7.4","@babel/plugin-proposal-object-rest-spread": "^7.2.0",},"scripts": {"bootstrap": "npm install && lerna bootstrap --hoist \"{react,react-dom}\" -- --legacy-peer-deps",},"dependencies": {"dd-trace": "^2.2.0","node-sass": "^4.14.1"}
}
package.json 屬性說明
- name - 包名。
- version - 包的版本號。
- description - 包的描述。
- homepage - 包的官網 url 。
- author - 包的作者姓名。
- contributors - 包的其他貢獻者姓名。
- dependencies - 依賴包列表。如果依賴包沒有安裝,npm 會自動將依賴包安裝在 node_module 目錄下。
- repository - 包代碼存放的地方的類型,可以是 git 或 svn,git 可在 Github 上。
- main - main 字段指定了程序的主入口文件,require(‘moduleName’) 就會加載這個文件。這個字段的默認值是模塊根目錄下面的 index.js。
- keywords - 關鍵字
2.5 npm常用命令
- npm help 可查看某條命令的詳細幫助,例如npm help install。
- 在package.json所在目錄下使用npm install . -g可先在本地安裝當前命令行程序,可用于發布前的本地測試。
- npm update 可以把當前目錄下node_modules子目錄里邊的對應模塊更新至最新版本。
- npm update -g可以把全局安裝的對應命令行程序更新至最新版。
- npm cache clear可以清空NPM本地緩存,用于對付使用相同版本號發布新版本代碼的人。
- npm unpublish @可以撤銷發布自己發布過的某個版本代碼。