npm 能夠在項目package.json裏面自定義腳本命令node
package.json文件 { "script":{ "dev": "webpack -w" } }
package.json文件中的字段script的每個屬性都是一個自定義的腳本命令。webpack
在命令行中能夠經過執行npm run dev來執行這段腳本。web
執行原理shell
使用npm run script執行腳本的時候都會建立一個shell,而後在shell中執行指定的腳本。npm
這個shell會將當前項目的可執行依賴目錄(即node_modules/.bin)添加到環境變量path中,當執行以後以後再恢復原樣。就是說腳本命令中的依賴名會直接找到node_modules/.bin下面的對應腳本,而不須要加上路徑。json
執行順序post
一個npm腳本能夠執行多個任務,這些任務之間能夠指定不一樣的執行順序。this
'&' 並行執行順序,同時執行 "dev":"node test.js & webpack" '&&'繼發順序,執行前面以後才能夠執行後面 "dev":"node test.js && webpack"
順序鉤子spa
npm腳本自帶兩個順序鉤子,'pre' 和 'post'命令行
"predev":"node test_one.js", "dev":"node test_two.js", "postdev":"node test_three.js"
當執行 npm run dev 的時候默認就會執行
npm run predev && npm run dev && npm run postdev
獲取當前正在運行的腳本名稱
npm 提供一個npm_lifecycle_event
變量,返回當前正在運行的腳本名稱,能夠配合順序鉤子使用
npm run dev const target = process.env.npm_lifecycle_event; if(target === 'predev'){ console.log('the process is predev') } if(target === 'dev'){ console.log('the process is dev') } if(target === 'postdev'){ console.log('this process is postdev') }
四個能夠簡寫的腳本執行命令
npm start === npm run start npm stop === npm run stop npm test === npm run test npm restart === npm run stop && npm run restart && npm run start
使用package.json內部變量
經過npm_package_前綴,npm腳本能夠拿到npm的內部變量
package.json: { "name":"zzpzds", "script":"node test.js" } test.js: console.log(process.env.npm_package_name) //zzpzds