2016-09-23 61 views
1

我有一個"prebuild"腳本,執行以下操作:MKDIR不能在Linux NPM腳本的工作,但在Mac

mkdir -p dist/{server,shared,client/{css,js,fonts,img}} 

我想爲這個創造結構像這樣:

dist 
    server 
    shared 
    client 
     css 
     js 
     fonts 
     img 

當我從終端上運行mkdir命令時,它有正確的輸出。但是,如果我把這個命令作爲NPM腳本,像這樣:

的package.json

{ 
    "scripts": { 
     "prebuild": "mkdir -p dist/{server,shared,client/{css,js,fonts,img}}" 
    } 
} 

,然後當我做npm run prebuild,它僅創建一個奇怪的名字一個文件夾:{server,shared,client

所以在Ubuntu上,它只在你直接輸入命令時才起作用,但如果你把它放在npm腳本中,你會遇到這個問題。在Mac上,它可以工作。

有誰知道爲什麼會發生這種情況?

回答

7

npm使用/bin/sh執行腳本,但Ubuntu使用dash作爲其POSIX外殼,而Mac OS X使用bash。支架擴展是一個bash功能,其中dash不具有。

bash(錯誤地,我會爭辯)當調用爲sh時仍然會處理大括號擴展。

+0

感謝您的回答! – saadq

+0

@meh_programmer請考慮接受這是正確的答案,通過點擊投票計數旁邊的空白勾號/複選標記,以便chepner獎勵積分,其他人知道它是正確的。 –

+0

完成,抱歉忘了等15分鐘後再做 – saadq

0

來自chepner的很好的解釋。我已經添加到答案給出一個解決方案。創建一個到bash shell的鏈接將允許你從npm腳本運行bash命令。

$ sudo ln -sf bash /bin/sh 

希望這可以幫助其他人在Ubuntu中遇到這個問題。

Credit to the link solution.

相關問題