package.json 使用指南

1. 概述

通常的 node 項目,或者依據 node 搭建的項目,項目的根目錄下都會有一個 package.json 文件,package.json 中定義了項目所須要的各類模塊和項目的配置信息。javascript

package.json 能夠手動建立,也可使用 npm init 去自動生成。html

一個完整的 package.json 通常都包含如下內容java

{
  "name": "hello world",
  "version": "1.0.0",
  "author": "小石",
  "description": "一個node程序",
  "keywords": ["node.js", "js"],
  "scripts": {
    "start": "gulp",
    "build:js": "gulp uglify-js"
  },
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.1.2",
    "@babel/preset-env": "^7.1.0"
  },
  "dependencies": {
    "browser-sync": "^2.23.6"
  }
}
複製代碼

其中nameversion(遵循大版本,次要版本,小版本),descriptionauthorkeywords,都屬於 package.json的一些基本信息,主要的功能仍是依賴 scriptsdependenciesdevDependenciesnode

2. scripts

scripts 主要指定了一些腳本命令的縮寫,好比上面的例子中,使用 npm start 就能夠運行 gulp 的腳本命令;使用 npm run build:js 就能夠運行 gulp uglify-js 的腳本命令。shell

有些命令縮寫須要寫run修飾符,有些不須要,主要仍是看命令的縮寫是否是 npm 的關鍵字。能夠在小黑窗(命令行工具)中輸入npm查看具體npm的關鍵字。express

如:npm

藍框框起來的命令,在使用的時候都不須要寫 run,直接輸入 npm XX 便可運行指定的命令。json

在使用 scripts 指定腳本縮寫的時候還有一些小技巧。gulp

2.1 scripts 命令的生命週期

在編寫運行腳本命令縮寫時,有生命週期的說話,在某個腳本縮寫以前使用 pre ,當運行指定的腳本命令以前,會先將對應添加了 pre 的命令進行運行。babel

如:

"scripts": {
    "pree2e": "karma start",
    "e2e": "node ./e2e/*.spec.js"
},
複製代碼

e2e 命令以前添加了一條 pree2e 的命令,在執行 npm run e2e 的時候,就會先執行 pree2e 對應的命令,而後執行 e2e 對應的命令。

小黑窗中執行的命令就以下圖所示:

2.2 && 和 & 的使用

在編寫 scripts 命令時,若是多條命令想寫到一個縮寫中,可使用 &&& 符號。

使用 && 鏈接的命令屬於串行執行,先執行 && 以前的命令,再執行&&以後的。

使用 & 鏈接的命令屬於並行執行,互不干擾,命令同時進行。

如:

"scripts": {
    "e2e": "karma start && node ./e2e/*.spec.js",
    "unit": "karma start & node ./e2e/*.spec.js"
},
複製代碼

2.3 多條命令一塊兒運行

很大的項目中有的時候會有不少條 scripts 命令的縮寫,有的時候須要將多條命令同時執行,可使用上面說的 &&& 符號鏈接,可是當不少條命令一塊兒執行時,使用 &&& 鏈接,看起來就會很冗餘。

這個時候就要用到 npm-run-all 命令了。

如:

"scripts": {
    "test": "npm-run-all unit  e2e  ui  service",
    "unit": "karma start",
    "pree2e": "karma start",
    "e2e": "node ./e2e/*.spec.js",
    "ui": "backstop test",
    "service": "node ./mochaRunner"
}
複製代碼

npm-run-all 命令能夠規定有些命令能夠一塊兒執行,可是這個是串行的執行,有一個命令掛了就會致使命令中止。

這個時候還能夠添加一個關鍵字 --parallel ,表示後面的命令同時執行。

如:

"test": "npm-run-all --parallel unit  e2e  ui  service"
複製代碼

2.4 命令的退出

在寫腳本命令的時候可使用 exit() 退出,exit(0) 表示正常退出,exit(1) 表示非正常退出,其實這些都是 node 中的命令,在 node 中使用更多一些。

"test": "npm-run-all --parallel unit  e2e  ui  service exit()"
複製代碼

在 node 中 process.exit(0) 表示正常退出,process.exit(1) 表示非正常退出,非正常退出能夠再處理異常的時候使用。

3. dependencies 和 devDependencies

3.1 簡介

dependenciesdevDependencies 中其實都是添加一些項目中須要引用的依賴包。可是二者是有區別的,dependencies 中依賴包主要是項目運行時所須要的,在打包的時候會將依賴包打到項目中。devDependencies 主要是項目開發時所須要的依賴模塊,這個主要是開發的時候用,打包的時候不會打到項目中。

dependenciesdevDependencies 下的依賴都有版本號。在對應的版本號上能夠添加各類限定,主要有一下幾種:

  • 指定版本:好比 1.2.2,遵循「大版本.次要版本.小版本」的格式規定,安裝時只安裝指定版本。
  • 波浪號(tilde)+指定版本:好比~1.2.2,表示安裝 1.2.x 的最新版本(不低於 1.2.2),可是不安裝 1.3.x,也就是說安裝時不改變大版本號和次要版本號。
  • 插入號(caret)+指定版本:好比 ˆ1.2.2,表示安裝 1.x.x 的最新版本(不低於 1.2.2),可是不安裝 2.x.x,也就是說安裝時不改變大版本號。須要注意的是,若是大版本號爲 0,則插入號的行爲與波浪號相同,這是由於此時處於開發階段,即便是次要版本號變更,也可能帶來程序的不兼容。
  • latest:安裝最新版本。

3.2 安裝

在安裝某一個模塊時,會根據使用的命令不一樣,指定依賴包運行的環境。

如:

npm install express --save
npm install express --save-dev
複製代碼

使用 --save 會默認將依賴包安裝到 dependencies 下,使用--save-dev會將依賴包安裝到 devDependencies 下。

4. bin

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

如:

"bin": {
  "someTool": "./bin/someTool.js"
}
複製代碼

有了上面的 bin 以後,咱們寫 scripts 命令時,就能夠進行縮寫了。

如:

scripts: {
  start: './node_modules/someTool/someTool.js build';
}

// 簡寫爲
scripts: {
  start: 'someTool build';
}
複製代碼

5. 其餘

其餘的命令還有不少,上面的主要是經常使用的,還想詳細瞭解的,能夠參考JavaScript 標準參考教程

其實 package.json 只是一個配置的 json 文件,懂一些基礎的就能夠了,能使用最重要,開發中最重要的仍是項目主體的開發,好多腳手架其實已經幫咱們把這些都弄好了,咱們要能看懂。

閱讀完後兩部曲

  1. 喜歡的小夥伴點個贊吧,感受對身邊人有幫助的,麻煩動動手指,分享一下。很是感謝各位花時間閱讀完,同時很感謝各位的點贊和分享。
  2. 但願各位關注一下個人公衆號吧,新的文章第一時間發到公衆號,公衆號主要發一些我的隨筆、讀書筆記、還有一些技術熱點和實時熱點,而且還有很是吸引人的我我的自費抽獎活動哦~

相關文章
相關標籤/搜索