通常我們使用npm init命令來創建一個npm程序時,會自動生成一個package.json文件。package.json文件會描述這個NPM包的所有相關信息,包括作者、簡介、包依賴、構建等信息,格式是嚴格的JSON格式。
常用命令
npm i --save packageName 安裝依賴包
npm i --save-dev packageName
npm i webpack@1.2.1 安裝指定版本的包,版本號用@符號連接
屬性介紹
name
name和version是package.json中最重要的兩個字段,也是發布到NPM平台上的唯一標識,如果沒有正確設置這兩個字段,包就不能發布和被下載。
version
包的版本號。如"1.0.0"。
description
包的描述信息,將會在npm search的返回結果中顯示,以幫助用戶選擇合適的包。
keywords
包的關鍵詞信息,是一個字符串數組,同上也將顯示在npm search的結果中。
homepage
包的主頁地址。
bugs
包的bug跟蹤主頁地址。
license
包的開源協議名稱。
author
包的作者。
contributors, maintainers
包的貢獻者,是一個數組。
files(較少用)
包所包含的所有文件,可以取值為文件夾。通常我們還是用.npmignore來去除不想包含到包里的文件。
main
包的入口文件。
bin(較少用)
如果你的包里包含可執行文件,通過設置這個字段可以將它們包含到系統的PATH中,這樣直接就可以運行,很方便。
man(較少用)
為系統的man命令提供幫助文檔。幫助文件的文件名必須以數字結尾,如果是壓縮的,需要以.gz結尾。
"man": ["./man/foo.1", "./man/bar.1", "./man/foo.2" ]
directories(較少用)
CommonJS包所要求的目錄結構信息,展示項目的目錄結構信息。字段可以是:lib, bin, man, doc, example。值都是字符串。
repository
包的倉庫地址。
"repository": { "type": "git", "url": "git+https://github.com/rainnaZR/es6-react.git" },
scripts
通過設置這個可以使NPM調用一些命令腳本,封裝一些功能。
"scripts": {"start": "babel-node src/pages/index.js", "build": "webpack --config config/webpack.config.js", "watch": "webpack-dev-server --config config/webpack.config.js --hot --inline --progress" }
config
添加一些設置,可以供scripts讀取用,同時這里的值也會被添加到系統的環境變量中。
"config": { "port": "8080" }
npm start的時候會讀取到npm_package_config_port環境變量。
dependencies
指定依賴的其它包,這些依賴是指包發布后正常執行時所需要的,也就是線上需要的包。使用下面的命令來安裝:
npm install --save packageName
如果是開發中依賴的包,可以在devDependencies設置。
devDependencies
這些依賴只有在開發時候才需要。使用下面的命令來安裝:
npm install --save-dev packageName
peerDependencies
相關的依賴,如果你的包是插件,而用戶在使用你的包時候,通常也會需要這些依賴(插件),那么可以將依賴列到這里。
如karma, 它的package.json中有設置,依賴下面這些插件:
"peerDependencies": { "karma-jasmine": "~0.1.0", "karma-requirejs": "~0.2.0", "karma-coffee-preprocessor": "~0.1.0", "karma-html2js-preprocessor": "~0.1.0", "karma-chrome-launcher": "~0.1.0", "karma-firefox-launcher": "~0.1.0", "karma-phantomjs-launcher": "~0.1.0", "karma-script-launcher": "~0.1.0" }
bundledDependencies
綁定的依賴包,發布的時候這些綁定包也會被一同發布。
optionalDependencies(較少用)
即使這些依賴沒有,也可以正常安裝使用。
engines(較少用)
指定包運行的環境。
"engines": { "node": ">=0.10.3 < 0.12", "npm": "~1.0.20" }
os(較少用)
指定你的包可以在哪些系統平台下運行。
"os": [ "darwin", "linux", "!win32" ]
cpu(較少用)
可以指定包運行的cpu架構。
private
設為true這個包將不會發布到NPM平台下。
publishConfig(較少用)
這個字段用於設置發布時候的一些設定。尤其方便你希望發布前設定指定的tag或registry。
如下:
{ "name": "react", "version": "1.0.0", "description": "Command line instructions", "keywords": [ "react", "es6", "react with es6" ], "homepage": "https://github.com/rainnaZR/es6-react", "bugs": { "url": "https://github.com/rainnaZR/es6-react", "email": "111@163.com" }, "license": "ISC", "author": "ZRainna", "main": "src/pages/index.js", "directories": { "tests": "tests", "lib":"lib", "docs":"docs" }, "repository": { "type": "git", "url": "git+https://github.com/rainnaZR/es6-react.git" }, "scripts": {"start": "babel-node src/pages/index.js", "build": "webpack --config config/webpack.config.js", "watch": "webpack-dev-server --config config/webpack.config.js --hot --inline --progress" }, "babel": { "presets": [ "es2015-node5" ] }, "devDependencies": { "webpack": "^1.13.2", "webpack-dev-server": "^1.16.1" }, "dependencies": { "babel-loader": "^6.2.5", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.11.1", "react": "^15.3.2", "react-dom": "^15.3.2", "react-redux": "^4.4.5", "react-router": "^2.8.1", "redux": "^3.6.0" } }
參考:
https://www.ijser.cn/npm-package-json-document/
