###### tags: `Angular` `npm` # 🌝[T]npm腳本 ## 前言 > npm 是 Node Package Manager的簡稱,是個線上套件庫,可以下載各式各樣的Javascript套件使用。 ### package.json 專案資訊檔 - name: 專案名稱,`預設目錄名` - version: 專案版本 - scripts: 專案npm腳本 - description: 專案描述 - entry point: 專案切入點 - test command: 專案測試指令 - git repository: 專案原始碼版控位置 - keywords: 專案關鍵字 - author: 專案作者, `author-name<[author@email.com](mailto:author@email.com)>` - license: 專案版權 ## 什麼是npm腳本? ``` 💡我們使用腳本來自動執行重複性的任務,例如: 建構,除了npm外還有Gulp或Grunt可以使用。 ``` npm允許在package.json,使用scripts定義腳本命令。 ![](https://i.imgur.com/aZaLLS2.png) ``` 💡scripts裡的屬性(腳本命令)各對應一段腳本。 這些定義在package.json `scripts`裡的腳本,稱為npm腳本。 ``` 在終端機使用npm run [script-name]就可以執行腳本。 ![](https://i.imgur.com/2hH1T3O.png) 想查看當前項目所有的npm腳本,可使用npm run。 ![](https://i.imgur.com/TZyQaUM.png) ## 如何編寫npm腳本? ``` 💡當執行npm run時,會自動建立一個shell,在裡面執行腳本。 所以只要是shell內可以執行的指令,就可以寫在腳本內。 ``` ### 新增npm腳本 只要在package.json `scripts` 添加腳本命令(自訂)、指令即完成 ![](https://i.imgur.com/tb4mFFf.png) ng server = node %~dp0/../node_modules/@angular/cli/bin/ng serve 若想編寫的npm腳本是有關部署的 可參考webpack文件。 ``` 💡Angular CLI 是使用Webpack來打包程式。 ``` > webpack文件 [https://webpack.js.org](https://webpack.js.org/) > Terminal指令[Angular CLI命令](https://www.javatpoint.com/angular-7-all-cli-commands) - `--` 來分隔選項,後面接的東西會當參數傳進去 [https://stackoverflow.com/questions/11580961/sending-command-line-arguments-to-npm-script](https://stackoverflow.com/questions/11580961/sending-command-line-arguments-to-npm-script) [https://stackoverflow.com/questions/4351521/how-do-i-pass-command-line-arguments-to-a-node-js-program](https://stackoverflow.com/questions/4351521/how-do-i-pass-command-line-arguments-to-a-node-js-program) - progress 進度條,--progress=false 進度條不要執行 - source-map原始碼對應表 # 補充 --- ## webpack & gulp 差異 webpack與gulp都是可以編譯preprocess的工具, - ***gulp*** : 偏向命令編寫 (意思是所有編譯動作的邏輯都需要自己編寫) - ***webpack***: 偏向設定,有一定的規範,相較清楚 (優點他人易接手) 兩者選擇推薦webpack,目前gulp已停止更新了 ## package.json & package-lock.json - ***package-lock.json*** : 安裝依賴時,包的版本,依官方文檔說明,此檔案是在npm install時紀錄安裝的各個npm package具來源及版本。 - ***package.json*** : 專案資訊檔,用來管理與package間依賴關係,許允開發者在檔案中設定npm對各包的依賴。 ## src & dist - ***src*** : 專門放Preprocess的檔案,此資料夾部會丟上server部署 - ***dist*** : 經過webpack編譯打包後,產出瀏覽器看得懂的html、css、js,也是此資料夾去部署