package.json說明


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: 包含在項目中的文件數組。如果在數組里面聲明了一個文件夾,那也會包含文件夾中的文件。可以聲明一些規則來忽略部分文件。可以在項目根目錄或者子目錄里聲明一個.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腳本指令

    1. prepublish: 在包發布之前運行,也會在npm install安裝到本地時運行
    2. publish,postpublish: 包被發布之后運行
    3. preinstall: 包被安裝前運行
    4. install,postinstall: 包被安裝后運行
    5. preuninstall,uninstall: 包被卸載前運行
    6. postuninstall: 包被卸載后運行
    7. preversion: bump包版本前運行
    8. postversion: bump包版本后運行
    9. pretest,test,posttest: 通過npm test命令運行
    10. prestop,stop,poststop: 通過npm stop命令運行
    11. prestart,start,poststart: 通過npm start命令運行
    12. prerestart,restart,postrestart: 通過npm restart運行
  • 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://docs.npmjs.com/files/package.json


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM