package.json---入门说明
直接的說:就是管理你本地安裝的npm包?
一個package.json文件可以做如下事情:
展示項目所依賴的npm包?
允許你指定一個包的版本[范圍]?
讓你建立起穩定,意味著你可以更好的與其他開發者共享
創建package.json
在你要創建的目錄下執行:npm init,系統會一一提示設置相關配置。提示設置的字段均為必填字段(有的可以用回車鍵,即設置為空帶過)
- npm init –yes|-y: 執行此命令,則會直接創建一個package.json,只配置了一些必填字段,并且給出默認值。其中name: 所處的文件夾名稱
package.json配置說明
這里說的項目廣義,比如:我們可以把我們的項目發布成一個npm包
- name: 項目名稱
- version: 項目版本號
- description: 項目描述
- keywords: {Array}關鍵詞,便于用戶搜索到我們的項目
- homepage: 項目url主頁
-
bugs: 項目問題反饋的Url或email配置,如:?
{??
“url” : “https://github.com/owner/project/issues“,?
“email” : “project@hostname.com”?
} -
license: 項目許可證,讓使用者知道是如何被允許使用此項目。默認是”ISC”
-
author,contributors: 作者和貢獻者。格式設置如下:?
{ “name” : “Barney Rubble”?
, “email” : “b@rubble.com”?
, “url” : “http://barnyrubble.tumblr.com/”?
} -
files: 包含在項目中的文件數組。如果在數組里面聲明了一個文件夾,那也會包含文件夾中的文件??梢月暶饕恍┮巹t來忽略部分文件。可以在項目根目錄或者子目錄里聲明一個.npmignore。
Certain files are always included, regardless of settings:
package.json?
README (and its variants)?
CHANGELOG (and its variants)?
LICENSE / LICENCE?
Conversely, some files are always ignored:
.git?
CVS?
.svn?
.hg?
.lock-wscript?
.wafpickle-N?
*.swp?
.DS_Store?
._*?
npm-debug.log
- main: 主文件。比如默認是index.js,項目名稱叫mymodule。那么require(‘mymodule’)將返回index.js返回的內容
- bin: 項目用到的可執行文件配置
- man: 指定一個單一的文件名或一個文件名數組。意思類似于linux命令中的man 命令,來查看一個命令的用法?
如果只給man字段提供一個文件,則安裝完畢后,它就是man 的結果,這和此文件名無關?
{?
“name”: “foo”,?
“version”: “1.2.3”,?
“description”: “A packaged foo fooer for fooing foos”,?
“main”: “foo.js”,?
“man”: “./man/doc.1”?
}?
上面這個配置將會在執行man foo時就會使用./man/doc.1這個文件。
如果指定的文件名并未以包名開頭,那么它會被冠以前綴,像這樣
{?
“name”: “foo”,?
“version”: “1.2.3”,?
“description”: “A packaged foo fooer for fooing foos”,?
“main”: “foo.js”,?
“man”: [?
“./man/foo.1”,?
“./man/bar.1”?
]?
}?
這將會為man foo和man foo-bar創建文件
man文件必須以一個數字結尾,和一個可選的.gz后綴(當它被壓縮時)。這個數字說明了這個文件被安裝到哪個節中
{?
“name”: “foo”,?
“version”: “1.2.3”,?
“description”: “A packaged foo fooer for fooing foos”,?
“main”: “foo.js”,?
“man”: [?
“./man/foo.1”,?
“./man/foo.2”?
]?
}?
會為使用man foo和man 2 foo而創建
- directories: CommonJS Packages規范說明了幾種你可以用directories對象來標示你的包結構的方法
- directories.lib: 告訴你庫文件夾的位置,目前沒有什么地方需要用到lib文件夾,但是這是重要的元信息
-
directories.bin: 如果你在directories.bin中指定一個bin目錄,在這個目錄中的所有文件都會被當做在bin來使用。
由于bin指令的工作方式,同時指定一個bin路徑和設置directories.bin將是一個錯誤。如果你想指定獨立的文件,使用bin,如果想執行某個文件夾里的所有文件,使用directories.bin。
-
directories.doc: 把markdown文件放在這。也許某一天這些文件將被漂亮地展示出來,不過這僅僅是也許
- directories.man: directories.man指定的文件夾里都是man文件,系統通過遍歷這個文件夾來生成一個man的數組
- directories.example: 把示例腳本放在這。也許某一天會被用到
-
repository: 項目代碼存放地方
“repository” :?
{ “type” : “git”?
, “url” : “https://github.com/npm/npm.git”?
}?
“repository” :?
{ “type” : “svn”?
, “url” : “https://v8.googlecode.com/svn/trunk/”?
} -
scripts: 聲明一系列npm腳本指令
- prepublish: 在包發布之前運行,也會在npm install安裝到本地時運行
- publish,postpublish: 包被發布之后運行
- preinstall: 包被安裝前運行
- install,postinstall: 包被安裝后運行
- preuninstall,uninstall: 包被卸載前運行
- postuninstall: 包被卸載后運行
- preversion: bump包版本前運行
- postversion: bump包版本后運行
- pretest,test,posttest: 通過npm test命令運行
- prestop,stop,poststop: 通過npm stop命令運行
- prestart,start,poststart: 通過npm start命令運行
- prerestart,restart,postrestart: 通過npm restart運行
-
"scripts": {
? ? ? ? "dev": "npm run start",
? ? ? ? "dist": "cross-env NODE_ENV=production node ./tools/script.js",
? ? ? ? "lint": "eslint src/ --ext .js,.vue && stylelint \"src/**/*.vue\" --syntax less",
? ? ? ? "lint:js": "eslint src/ --ext .js,.vue",
? ? ? ? "lint:style": "stylelint src/**/*.less --syntax less",
? ? ? ? "pub": "npm run dist",
? ? ? ? "start": "cross-env NODE_ENV=development node ./tools/script.js",
? ? ? ? "test": ""
? ? }
-
config: 配置項目中需要的配置參數:
{ “name” : “foo”?
, “config” : { “port” : “8080” }?
, “scripts” : { “start” : “node server.js” } } }?
server.js中使用process.env.npm_package_config_port來訪問port?
用戶也可以這樣修改:npm config set foo:port 80 -
dependencies: 項目在生產環境中依賴的包
- devDependencies: 項目在開發和測試環境中依賴的包
-
peerDependencies: 在某些情況下,當一個主機無法require依賴包時,你會想要告訴它還有哪些工具或庫與這個依賴包兼容。這通常被成為一個插件。尤其是在host文檔中聲明的模塊會暴露一個特定的接口
{?
“name”: “tea-latte”,?
“version”: “1.3.5”,?
“peerDependencies”: {?
“tea”: “2.x”?
}?
}?
這將確保tea-latte這個包只會和2.x版本的tea一起被安裝。執行npm install tea-latte可能產生以下關系圖:?
├── tea-latte@1.3.5?
└── tea@2.2.0 -
bundledDependencies: {Array},發布時會被一起打包的模塊
-
optionalDependencies: 如果一個依賴模塊可以被使用, 同時你也希望在該模塊找不到或無法獲取時npm繼續運行,你可以把這個模塊依賴放到optionalDependencies配置中。這個配置的寫法和dependencies的寫法一樣,不同的是這里邊寫的模塊安裝失敗不會導致npm install失敗。當然,這種模塊就需要你自己在代碼中處理模塊確實的情況了,例如:
try {?
var foo = require(‘foo’)?
var fooVersion = require(‘foo/package.json’).version?
} catch (er) {?
foo = null?
}?
if ( notGoodFooVersion(fooVersion) ) {?
foo = null?
}?
// .. then later in your program ..?
if (foo) {?
foo.doFooThings()?
} -
engines: 聲明項目需要的node或npm版本范圍
{ “engines” : { “npm” : “~1.0.20” } }?
{ “engines” : { “node” : “>=0.10.3 <0.12” } } -
os: 指定你的項目將運行在什么操作系統上
- cpu: 指定你的項目將運行在什么cpu架構上
- preferGlobal: 如果你的包需要全局安裝,通過命令行來運行,那么設置為true。如果這個包被本地安裝則會出現一個警告
- private: 如果設置為true, 那么npm會拒絕發布它
- publishConfig
轉載于:https://www.cnblogs.com/Super-scarlett/p/8177871.html
總結
以上是生活随笔為你收集整理的package.json---入门说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 10 expdp impd
- 下一篇: 常识——CE修改器使用