如果您在Linux终端中运行此命令:
mkdir -p ./dist/{articles,scripts,stylesheets}
它将在当前目录中创建以下文件夹树:
dist
|- articles
|- scripts
|- stylesheets
当我尝试使用shelljs npm软件包进行相同操作时,会发生问题。
例如,调用以下函数:
shell.mkdir("-p", "./dist/{articles,scripts,stylesheets}");
结果将创建以下文件树:
dist
|- {articles,scripts,stylesheets}
换句话说,这是一个名为dist
的文件夹,其中包含一个名为{articles,scripts,stylesheets}
的子文件夹。
我已经尝试过将花括号转义,就像这样:
shell.mkdir("-p", "./dist/\{articles,scripts,stylesheets\}");
它没有用,所以我加倍努力并逃脱了反斜杠:
shell.mkdir("-p", "./dist/\\{articles,scripts,stylesheets\\}");
那也不起作用,所以我再次加倍并在转义的反斜杠之前添加了转义的反斜杠:
shell.mkdir("-p", "./dist/\\\\{articles,scripts,stylesheets\\\\}");
什么都不起作用,但是确实创建了一个具有不同名称的文件夹:
\\{articles,scripts,stylesheets\\}
如何解决此问题?
答案 0 :(得分:4)
正确的方法是使用循环或类似方法重写括号扩展:
const shell = require('shelljs')
for(var dir of ["articles", "scripts", "stylesheets"]) {
shelljs.mkdir("-p", "./dist/" + dir)
}
这是快速,强大和便携式的。
等效地,您可以使用third party library来为您展开它们:
const shell = require('shelljs')
const braces = require('braces')
shell.mkdir("-p", braces("./dist/{articles,scripts,stylesheets}", {expand: true}))
字面意义上的方法是显式调用Bash,因为括号扩展是bash的功能:
shelljs.exec("bash -c 'mkdir -p ./dist/{articles,scripts,stylesheets}'")
这是缓慢,易碎且不可移植的,因为它需要两次调用两个Unix shell并进行两个相应的转义级别。
shelljs
的要点是将这些代码替换为纯JS实现,以便它需要零壳的零调用,因此这完全违背了首先使用它的目的。
答案 1 :(得分:0)