npm package.json文件解讀

每一個Nodejs項目的根目錄下面,通常都會有一個package.json文件。該文件能夠由npm init生成,定義了項目所須要的各類模塊,以及項目的配置信息(好比名稱、版本、許可證等元數據)。html

package.json文件內部就是一個JSON對象,該對象的每個成員就是當前項目的一項設置。node

基本字段

  1. namenpm

    項目名稱(npm包名)。必需字段json

  2. version數組

    項目版本。必需字段。
    版本號的格式爲"1.0.0",分別表明「主版本號.次版本號.修訂號」。它的遞增規則以下:
    • 主版本號:當你作了不兼容的API 修改;
    • 次版本號:當你作了向下兼容的功能性新增;
    • 修訂號:當你作了向下兼容的問題修正。

    在實際使用中,通常能夠看到各類形式的版本號:grunt

    *: 任意版本
    1.1.0: 指定版本
    ~1.1.0: 1.1.0 <= 版本 < 1.2.0
    ^1.1.0: 1.1.0 <= 版本 < 2.0.0
    latest:安裝最新版本。
    • *表示任意版本;
    • ~前綴表示,安裝大於指定的這個版本,而且匹配到 x.y.z 中 z 最新的版本;
    • ^前綴在 ^0.y.z 時的表現和 ~0.y.z 是同樣的,然而 ^1.y.z 的時候,就會匹配到 y 和 z 都是最新的版本;
    • 特殊的是,當版本號爲 ^0.0.z 或者 ~0.0.z 的時候,考慮到 0.0.z 是一個不穩定版本, 因此它們都至關於 =0.0.z。
  3. author && contributors單元測試

    項目做者以及貢獻者。author是字符串形式的做者名,contributors是一個項目貢獻者數組。測試

  4. description && keywords命令行

    項目描述和項目關鍵字。幫助人們在使用npm search時找到這個包。code

  5. license

    許可證。

功能性字段

  1. scripts

    定義腳本命令。它的每個屬性,對應一段腳本。而且能夠在命令行下使用npm run命令執行這段腳本。

    npm 腳本的原理很是簡單。每當執行npm run,就會自動新建一個 Shell,在這個 Shell 裏面執行指定的腳本命令。所以,只要是 Shell(通常是 Bash)能夠運行的命令,就能夠寫在 npm 腳本里面。

    比較特別的是,npm run新建的這個 Shell,會將當前目錄的node_modules/.bin子目錄加入PATH變量,執行結束後,再將PATH變量恢復原樣。

    更多可參考阮老師的 npm scripts 使用指南

  2. dependencies && devDependencies

    npm install在安裝node模塊時,有兩種命令參數能夠把它們的信息寫入package.json文件: –save以及–save-dev–save會把依賴包名稱添加到package.json文件dependencies鍵下,–save-dev則添加到package.json文件devDependencies鍵下。

    dependencies字段指定了項目生產環境中須要的依賴,即正常運行該包時所依賴的模塊,devDependencies指定項目開發所須要的依賴項,像一些進行單元測試之類的包,好比grunt-contrib-uglify,咱們用它混淆js文件,它們不會被部署到生產環境。

    它們都指向一個對象。該對象的各個成員,分別由模塊名和對應的版本要求組成,表示依賴的模塊及其版本範圍。

  3. bin

    用來指定各個內部命令對應的可執行文件的位置。

    例如:

    "bin": {
        "someTool": "./bin/someTool.js"
    }

    上面代碼指定,someTool 命令對應的可執行文件爲 bin 子目錄下的 someTool.js

  4. main

    指定包的入口程序文件。這個字段的默認值是模塊根目錄下面的index.js。

  5. config

    用於向環境變量輸出值。

    好比:

    {
        // ...
        "config" : { "port" : "8080" },
    }

    而後經過process.env.npm_package_config_port讀取該值。

其餘字段

  1. engines

    指定node的工做版本

  2. man

    指定當前模塊的man文檔的位置。

  3. preferGlobal

    布爾類型值,表示當用戶不將該模塊安裝爲全局模塊時(即不用–global參數),要不要顯示警告。

    ...

相關文章
相關標籤/搜索