我如何递归JS-Beautify?

Per*_*age 14 javascript bash shell

我在目录和子目录中有很多html文件.我可以js-beautify通过命令行执行命令,并希望以递归方式将其应用于所有这些文件.

我试过了

找 .-name" .html"-type f | js-beautify -r andjs-beautify -r | 找 .-name" .html"-type f

但它不起作用.然而,JS-美化确实工作,如果我看到这样的信息js-beautify -r myfile.html或者js-beautify -r *.html(在一个目录下的所有文件的情况下,而不是在子目录)

任何人都可以告诉我应该如何处理这两个命令?

dev*_*ull 17

但是,JS-beautify确实有效......如果目录中的所有文件都存在,但不在子目录中

您已经提到,如果所有输入文件都在同一目录中,则JS-beautify可以正常工作.您的命令可能不起作用,因为您传递的所有结果find可能包含来自不同目录的输入文件.

如前面的评论中所述,您可以使用-exec:

find . -type f -name "*.html" -exec js-beautify -r {} \;
Run Code Online (Sandbox Code Playgroud)

  • 万一有人在Mac上执行此操作,并且-r命令不起作用,我设法使它起作用:`find。-type f -name“ * .js” -exec sh -c'js-beautify {} >> {}'\;` (2认同)

1j0*_*j01 15

我遇到了类似的问题,并使用glob-run找到了一个简单的跨平台解决方案:

npm i -g glob-run js-beautify
glob-run html-beautify -r **/*.html
Run Code Online (Sandbox Code Playgroud)

不过,如果js-beautify 支持globs本身会很好.


Bil*_*ill 6

find+xargs 是要走的路。它比使用 -exec 查找要快。

find . -name '*.html' | xargs js-beautify 
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因,你的文件名中有空格,你会想要这样做......

find . -name '*.html' -print0 | xargs -0 js-beautify
Run Code Online (Sandbox Code Playgroud)

最后,如果由于某种奇怪的原因,js-beautify 不能处理多个参数,那么您需要告诉 xargs 一次只传递一个参数。这与使用 -exec 选项没有太大区别,但 IMO 更好,因为它更一致。

find . -name '*.html' | xargs -n 1 js-beautify
Run Code Online (Sandbox Code Playgroud)

请注意,您可以将-print0xargs -0选项与xargs -n 1.

编辑:正如 TJ Crowder 所指出的,shell 不会在双引号中使用通配符。这对我来说是个新闻,也许有一些古老的环境并非如此,希望你永远不会被迫在其中工作。


Jam*_*son 5

1)将这些依赖项添加到项目中

npm install --save-dev glob js-beautify
Run Code Online (Sandbox Code Playgroud)

2)创建 scripts/format.js

const jsBeautify = require('js-beautify')['js_beautify'];
const fs = require('fs');
const glob = require('glob');

const options = {
  indent_size: 2,
  indent_char: ' ',
  indent_with_tabs: false,
  eol: '\n',
  end_with_newline: true,
  indent_level: 0,
  preserve_newlines: true,
  max_preserve_newlines: 10,
  space_in_paren: false,
  space_in_empty_paren: false,
  jslint_happy: false,
  space_after_anon_function: false,
  brace_style: 'collapse',
  break_chained_methods: false,
  keep_array_indentation: false,
  unescape_strings: false,
  wrap_line_length: 0,
  e4x: false,
  comma_first: false,
  operator_position: 'before-newline'
};

glob('**/!(node_modules)/**/*.js', { absolute: true }, (er, files) => {
  files.forEach(file => {
    console.log(`js-beautify ${file}`);
    const data = fs.readFileSync(file, 'utf8');
    const nextData = jsBeautify(data, options);
    fs.writeFileSync(file, nextData, 'utf8');
  });
});
Run Code Online (Sandbox Code Playgroud)

3)添加format脚本package.json

"scripts": {
  "format": "node ./scripts/format.js"
}
Run Code Online (Sandbox Code Playgroud)

4)在你的项目中,运行

npm run format
Run Code Online (Sandbox Code Playgroud)