2016-01-22 153 views
13

我想嘗試使用npm爲Web應用程序運行我的各種構建任務。我知道我可以通過添加scripts場我package.json像這樣做:使用npm運行bash腳本

"scripts": { 
    "build": "some build command" 
}, 

當你有一大堆的選項更復雜的命令這得到笨拙。是否有可能將這些命令移動到bash腳本或其他方面?喜歡的東西:

"scripts": { 
    "build": "build.sh" 
}, 

其中npm run build將在build.sh文件執行命令?

通過this閱讀後似乎是這樣,但我不清楚我應該放棄我的build.sh文件或如果我失去了一些東西。

+7

不要這樣做。節點隨處運行。 Bash沒有。無論你在bash中做什麼,都可以在節點**中執行**,甚至可以使用程序包依賴關係完成CLI調用。需要'rm'?安裝rimraf,然後在[npm腳本](http://www.slideshare.net/k88hudson/advanced-frontend-automation-with-npm-scripts)中使用。 'mkdir -p'?安裝'mkdirp',然後在npm腳本中使用它。你有一個*平臺獨立的通用腳本語言*,在那裏,不要去假裝它只是Nix。命令行是否太複雜了?使用像grunt或gulp這樣的任務跑步者。保持通用。 –

+1

當你說「甚至可以使用包依賴來完成CLI調用」時,你是在談論類似[this]的東西(http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool -with-NPM)? –

+0

關閉但不是,請閱讀我鏈接到的幻燈片。您可以安裝CLI工具附帶的節點模塊,例如'grunt','gulp'或'mkdirp'等,而不需要全局安裝它們,然後*調用它們,就好像它們是全局安裝的一樣*在npm腳本中,像'「build」:「mkdirp build && less style/index.less> static/css/style.css && webpack」'。只要你調用的命令是npm管理的(即在package.json依賴列表中),這就行得通了。對於任何「這隻適用於一個操作系統」命令,請使用通用地執行相同操作的節點模塊。 –

回答

23

它完全可能的......

"scripts": { 
    "build": "./build.sh" 
}, 

此外,還要確保你把一個哈希爆炸在你的bash文件的頂部#!/usr/bin/env bash

還請確保您有權限執行的文件

chmod +x ./build.sh 
+0

bash文件在哪裏?它是否需要在node_modules'bin'目錄中? –

+1

你可以把它放在任何你想要的地方,只要確保你把相對路徑放在package.json中,例如'「build」:「。./path/to/my/awesome/build/file/build.sh」 – eblahm

+0

什麼是與...一起。前面?爲什麼不是「build」:「./build.sh」? –