package.json簡介
package.json在Node項目中用於描述項目的一些基本信息,以及依賴的配置,一般每一個Node項目的根目錄下都有一個package.json文件。
在項目的根目錄中我們可以通過npm init來初始化一個package.json文件,其內容是一個Json對象,基本結構如下:
{ "name": "package", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
package.json文件中包含了很多的屬性,這些屬性都是項目的一些基本信息以及一些配置信息,這里是一些更詳細的信息,着重介紹一些我們經常用到的屬性。
name main屬性
name和version屬性是package.json文件兩個不可或缺的屬性,通常name屬性和我們項目的文件名稱是一樣的,version表示這個項目的版本號。
main屬性指定了加載時的入口文件,當使用require()語法來加載一個模塊時,就會查看package.json文件的main屬性,main屬性的屬性值就是要加載的模塊。
在桌面新建一個文件夾(模塊)命名為factory,在該文件夾內新建一個index.js文件,在index.js文件中寫入以下代碼:
function create(){ var product = "我是一個產品"; return product; } exports.create = create;
然后在桌面上新建一個store文件夾,在該文件夾內新建一個store.js文件,在store.js文件中寫入以下代碼:
var factory = require("../factory"); var product = factory.create(); console.log(product);
在命令行中進入store文件夾輸入node store.js,可以發現運行成功,在store.js中通過require()函數加載factory模塊時如果沒有package.json文件,默認就會加載模塊中的index.js文件。如果存在package.json文件這樣在require()加載一個模塊時,就會讀取package.json文件的main屬性,main屬性指定的入口文件就是require()要加載的文件:
現在通過命令行進入factory文件通過npm init命令初始化一個package.json文件,將package.json文件的main屬性改為demo.js,然后在將factory文件內的index.js文件改名為demo.js,然后在命令行中進入store文件在執行node store.js,仍然是可以成功運行的。
scripts屬性
scripts屬性可以指定npm命令縮寫。在store文件夾中初始化package.json文件,然后添加scripts屬性:
執行npm run start仍然可以運行成功,通過scripts屬性npm run start等價於node store.js。
關於scripts的更具體的使用請看這里。
dependencies devDependencies屬性
當我們在命令行中執行npm install jquery -save時會在當前目錄下新建一個node_modules文件夾,將jquery下載到node_modules文件內,並將該模塊的依賴寫入到dependencies內。如果執行npm install react -save-dev時會將react下載到node_modules文件下並將依賴寫入到devDependencies內。
"dependencies": { "jquery": "^3.1.1" }, "devDependencies": { "react": "^15.3.2" }
如果在寫入依賴之后我們刪除node_module文件,然后執行npm install就會讀取package.json文件的dependencies和devDependencies屬性自動下載寫入的依賴模塊。