如何在 npm 脚本 glob 模式中使用否定?

How to use negation in npm script glob pattern?

我正在尝试创建一个 clean npm 脚本,但我继续在控制台中收到错误消息,或者没有达到预期的效果。我正在尝试删除除某些配置文件之外的所有根 JavaScript 文件。

以下删除所有忽略否定语法的文件

"clean": "rm -rf lib [a-z].js !*.config.js !*.support.js"

以下在控制台中抛出错误

"clean": "rm -rf lib !(*.config|*.support).js"
Syntax error: "(" unexpected

利用 rimraf 并将复杂的 glob 模式包装在 JSON 转义双引号中,即 \"...\"

例如:

"clean": "rimraf lib \"!(*.config|*.support).js\""

这个例子(上)

  1. 从项目目录的根目录中删除 lib 目录。
  2. 从项目目录的根目录中删除所有 .js 文件。但是,以 .config.js.support.js 结尾的文件(例如 foobar.config.jsquux.support.js)将被否定。

编辑: 通过 npm 脚本使用以下 bash find 命令也可以达到预期的结果:

"clean": "find . \( -name '*.js' -o -name 'lib' \) -not \( -name '*.config.js' -o -name '*.support.js' \) -maxdepth 1 -exec rm -rf {} \;"

但是我会选择前面提到的 rimraf 方法以获得更好的跨平台可移植性,包括 Windows cmd.exe