Javascript 如何在npm脚本全局模式中使用否定?
我正在尝试创建一个Javascript 如何在npm脚本全局模式中使用否定?,javascript,npm,npm-scripts,Javascript,Npm,Npm Scripts,我正在尝试创建一个cleannpm脚本,但是我继续在控制台中得到一个错误,或者期望的效果没有发生。我正在尝试删除除一些配置文件之外的所有根JavaScript文件 下面将删除所有忽略否定语法的文件 "clean": "rm -rf lib [a-z].js !*.config.js !*.support.js" 下面的代码在控制台中抛出一个错误 "clean": "rm -rf lib !(*.config|*.support).js" 利用并用JSON转义双引号包装复杂的全局模式,即\“…
clean
npm脚本,但是我继续在控制台中得到一个错误,或者期望的效果没有发生。我正在尝试删除除一些配置文件之外的所有根JavaScript文件
下面将删除所有忽略否定语法的文件
"clean": "rm -rf lib [a-z].js !*.config.js !*.support.js"
下面的代码在控制台中抛出一个错误
"clean": "rm -rf lib !(*.config|*.support).js"
利用并用JSON转义双引号包装复杂的全局模式,即\“…\”
例如:
“干净”:“rimraf lib\”!(*.config |*.support.js\“”
这个例子(上面)
lib
目录.js
文件。但是,以.config.js
或.support.js
结尾的文件(例如foobar.config.js
和quox.support.js
)将被否定“clean”:“find.\\(-name'*.js'-o-name'lib'\\)-not\\(-name'*.config.js'-o-name'*.support.js'\\)-maxdepth 1-exec rm-rf{}\\;”
但是,我会选择前面提到的
rimraf
方法,以提高跨平台的可移植性,包括Windowscmd.exe
您是否尝试使用正则表达式模式调用unix命令rm
?请注意,您试图运行的命令可能是特定于shell的(bash、zsh、ksh等),因此您可能需要研究如何使用模块,因为在不使用否定时,模块工作正常。我可以指定要删除的特定文件和文件夹,但当我尝试执行除配置文件以外的所有根js时,我遇到了问题。@smac89我在使用rimraf
时遇到了相同的问题,因此我切换回rm
@smac89-例如[a-z]
,在某些glob实现中受支持。OP中的第一个示例实际上对我很有用,它通过CLi和npm脚本直接运行。但是,OP第2个示例中的扩展glob模式直接通过CLI工作(使用shopt-s extglob
即extglob设置为on),但通过npm脚本失败。我认为你建议的rimraf
可移植性/跨平台性是正确的。根据我的回答,在npm脚本中使用带有扩展glob模式的rimraf
确实需要包装在\“…\”
中。我认为OP中的rm-rf
CMD不能通过npm脚本成功运行的原因是npm使用sh
而不是bash
来执行脚本(sh
不支持扩展globs)。自npm v5.1引入该选项以来。因此,(如果rm-rf
命令实际上直接通过CLI成功运行),您可以尝试:1)运行哪个bash
,它将返回路径,例如/bin/bash
。2) 运行npm config set script shell”/bin/bash“
设置要使用的shell。3) 然后再次尝试运行原始npm脚本。
Syntax error: "(" unexpected