通常的 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"
}
}
複製代碼
其中name
,version
(遵循大版本,次要版本,小版本),description
,author
,keywords
,都屬於 package.json
的一些基本信息,主要的功能仍是依賴 scripts
,dependencies
,devDependencies
。node
scripts
主要指定了一些腳本命令的縮寫,好比上面的例子中,使用 npm start
就能夠運行 gulp
的腳本命令;使用 npm run build:js
就能夠運行 gulp uglify-js
的腳本命令。shell
有些命令縮寫須要寫run
修飾符,有些不須要,主要仍是看命令的縮寫是否是 npm
的關鍵字。能夠在小黑窗(命令行工具)中輸入npm
查看具體npm
的關鍵字。express
如:npm
藍框框起來的命令,在使用的時候都不須要寫 run
,直接輸入 npm XX
便可運行指定的命令。json
在使用 scripts
指定腳本縮寫的時候還有一些小技巧。gulp
在編寫運行腳本命令縮寫時,有生命週期的說話,在某個腳本縮寫以前使用 pre
,當運行指定的腳本命令以前,會先將對應添加了 pre 的命令進行運行。babel
如:
"scripts": {
"pree2e": "karma start",
"e2e": "node ./e2e/*.spec.js"
},
複製代碼
給 e2e
命令以前添加了一條 pree2e
的命令,在執行 npm run e2e
的時候,就會先執行 pree2e
對應的命令,而後執行 e2e
對應的命令。
小黑窗中執行的命令就以下圖所示:
在編寫 scripts
命令時,若是多條命令想寫到一個縮寫中,可使用 &&
和 &
符號。
使用 &&
鏈接的命令屬於串行執行,先執行 &&
以前的命令,再執行&&
以後的。
使用 &
鏈接的命令屬於並行執行,互不干擾,命令同時進行。
如:
"scripts": {
"e2e": "karma start && node ./e2e/*.spec.js",
"unit": "karma start & node ./e2e/*.spec.js"
},
複製代碼
很大的項目中有的時候會有不少條 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"
複製代碼
在寫腳本命令的時候可使用 exit()
退出,exit(0)
表示正常退出,exit(1)
表示非正常退出,其實這些都是 node 中的命令,在 node 中使用更多一些。
"test": "npm-run-all --parallel unit e2e ui service exit()"
複製代碼
在 node 中
process.exit(0)
表示正常退出,process.exit(1)
表示非正常退出,非正常退出能夠再處理異常的時候使用。
dependencies
和 devDependencies
中其實都是添加一些項目中須要引用的依賴包。可是二者是有區別的,dependencies
中依賴包主要是項目運行時所須要的,在打包的時候會將依賴包打到項目中。devDependencies
主要是項目開發時所須要的依賴模塊,這個主要是開發的時候用,打包的時候不會打到項目中。
dependencies
和 devDependencies
下的依賴都有版本號。在對應的版本號上能夠添加各類限定,主要有一下幾種:
在安裝某一個模塊時,會根據使用的命令不一樣,指定依賴包運行的環境。
如:
npm install express --save
npm install express --save-dev
複製代碼
使用 --save
會默認將依賴包安裝到 dependencies
下,使用--save-dev
會將依賴包安裝到 devDependencies
下。
bin 項用來指定各個內部命令對應的可執行文件的位置。
如:
"bin": {
"someTool": "./bin/someTool.js"
}
複製代碼
有了上面的 bin 以後,咱們寫 scripts
命令時,就能夠進行縮寫了。
如:
scripts: {
start: './node_modules/someTool/someTool.js build';
}
// 簡寫爲
scripts: {
start: 'someTool build';
}
複製代碼
其餘的命令還有不少,上面的主要是經常使用的,還想詳細瞭解的,能夠參考JavaScript 標準參考教程。
其實 package.json
只是一個配置的 json 文件,懂一些基礎的就能夠了,能使用最重要,開發中最重要的仍是項目主體的開發,好多腳手架其實已經幫咱們把這些都弄好了,咱們要能看懂。