NPM Script 跑bash

我們在 npm 的 script 中,有時候會需要下 bash CMD指令,像是:

#! ./package.json
"scripts": {
    "runsh": "git status"
  }

只要在CMD下npm run runsh,就會執行git status

獨立成.sh檔案

那你可能會想說,你有非常非常多的指令要下,就會變成是:

#! ./package.json
"scripts": {
    "runsh": "cd bin/ && git status && git add . && git commit -a 'soso'"
  }

這樣的指令就會變得很長,你可以把它獨立成一個sh檔案,假設我們在專案./bin/資料夾底下去建立一個runsh.sh的檔案,內容為:

#!/bin/bash

(cd bin/)
(git status)
(git add .)
(git commit -a 'soso')

然後修改我們的package.json script,如下:

#! ./package.json
"scripts": {
    "runsh": "./bin/build.sh"
  }

一樣在 CMD 執行 npm run runsh,這樣就可以了,這樣寫的目的是為了讓你一旦因為指令多了之後,可以統一去管理你的sh。

node 執行 bash

剛剛我們看的,都是直接執行 bash 指令,但如果我們要在 js 檔案裡面去執行 bash 呢? shelljs

首先,你當然一定要npm install shelljs --save-dev,在專案'./bin/'下建立runjs.js,之後先修改package.json的 script:

#! ./package.json
"scripts": {
    "runsh": "./bin/build.sh",
    "runjs": "node ./bin/runjs"
  }

因為是js,CMD不可能直接執行,還是又透過 node 去處理,接著處理./bin/runjs.js的內容:

require('shelljs/global');

exec('git status');

在最上面記得 require shelljsexec可以拿來執行指令,一般很常用到的的指令,如lscpcd....等,shelljs都有提供方法,細節部分可以參考shelljs官網的說明。

Comments

comments powered by Disqus