mkdir在linux上没有在npm脚本中工作,但在mac上运行

saa*_*adq 1 linux bash ubuntu node.js npm

我有一个"prebuild"脚本执行以下操作:

mkdir -p dist/{server,shared,client/{css,js,fonts,img}}
Run Code Online (Sandbox Code Playgroud)

我想为此创建一个这样的结构:

dist
    server
    shared
    client
        css
        js
        fonts
        img
Run Code Online (Sandbox Code Playgroud)

当我mkdir从终端运行命令时,它具有正确的输出.但是,如果我将此命令作为npm脚本,如下所示:

的package.json

{
    "scripts": {
        "prebuild": "mkdir -p dist/{server,shared,client/{css,js,fonts,img}}"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,当我这样做时npm run prebuild,它只会创建一个名称奇怪的单个文件夹:{server,shared,client.

所以在Ubuntu上,它只能在你直接输入命令时起作用,但是如果你把它放在一个npm脚本中就会遇到这个问题.在Mac上,它可以正常工作.

有谁知道为什么会这样?

che*_*ner 7

npm用于/bin/sh执行脚本,但Ubuntu dash用作其POSIX shell,而Mac OS X使用bash.支撑扩展是一项bash功能,dash没有.

bash(错误地,我认为)在调用时仍会处理大括号扩展sh.