MKDIR不能在Linux NPM脚本的工作,但在Mac

问题描述:

我有一个"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上,它可以工作。

有谁知道为什么会发生这种情况?

npm使用/bin/sh执行脚本,但Ubuntu使用dash作为其POSIX外壳,而Mac OS X使用bash。支架扩展是一个bash功能,其中dash不具有。

bash(错误地,我会争辩)当调用为sh时仍然会处理大括号扩展。

+0

感谢您的回答! – saadq

+0

@meh_programmer请考虑接受这是正确的答案,通过点击投票计数旁边的空白勾号/复选标记,以便chepner奖励积分,其他人知道它是正确的。 –

+0

完成,抱歉忘了等15分钟后再做 – saadq

来自chepner的很好的解释。我已经添加到答案给出一个解决方案。创建一个到bash shell的链接将允许你从npm脚本运行bash命令。

$ sudo ln -sf bash /bin/sh 

希望这可以帮助其他人在Ubuntu中遇到这个问题。

Credit to the link solution.