我试图让我的JavaScript文件变得更小。
我有一个javascripts/
目录,然后是一个_website/javascripts/
目录,我的静态资产被编译。在javascripts/
目录的内部,我有几个嵌套目录,用于polyfill,库等,然后是我的站点的文件。
如何递归遍历javascripts/
的所有嵌套目录,并将缩小的,压缩的但未连接的文件输出到我的_website/javascripts/
目录中?
这是我到目前为止的代码。理想情况下,我可以在npm脚本中执行此操作。如果它现在仅适用于Linux,那就太酷了。
find scripts/ -name '*.js' -print0 | xargs -0 uglifyjs
然后我不知道如何将输入传递给每个xargs执行作为uglifyjs的--output标志的名称。
如何使用xargs执行此操作?它是{}概念吗?
答案 0 :(得分:1)
要递归迭代,您可以在较新版本的bash上使用globstar
选项:
#!/bin/bash
shopt -s globstar
shopt -s nullglob
for file in javascripts/**/*.js
do
name=$(basename "$file")
uglifyjs "$file" > "_website/javascripts/$name"
done
此外,您在do
之前错过了一个分号(如果您的代码在一行上则是必需的)并且最后错过了done
。
答案 1 :(得分:1)
以下是我最终如何做到这一点:
find javascripts/ -name '*.js' -print0 | xargs -0 -I file uglifyjs file -o _website/file
所以,find
匆匆忙忙地浏览javascripts/
中的所有内容。每当它找到名称以.js
结尾的内容时,它就会向STDOUT发送写入内容。 |
接受这些写入并将其发送到xargs
。
(find上的-print0
标志确保不添加新行或额外空格.xargs上的-0
标志确保处理find的每个输出,即使文件名有新的线或空间等等。)
-I file
创建一个变量file
,它保存从find
命令的每个输出中获得的文件名。然后我们在uglifyjs file -o _website/file
中使用该变量在每个js文件上运行uglify,并将其放在我们编译的网站目录_website
中的适当位置。小记:可能不会在_website/javascripts
中自动创建新目录。 Haven没有测试过。
祝所有来到这里的人好运!