如何用beauty将文件写入html?

如何用beauty将文件写入html?,html,node.js,js-beautify,Html,Node.js,Js Beautify,我想在test.html文件中写入以下html: <h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span></h2> 太棒了 这将是洛克式的: <h2> <strong> <a href="http://awesome.com"

我想在test.html文件中写入以下html:

<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span></h2>
太棒了
这将是洛克式的:

<h2>
    <strong>
        <a href="http://awesome.com">
            AwesomeCom
        </a>
    </strong>
    <span>
         is awesome
   </span>
</h2>



太棒了
所以它看起来很美等等…我尝试了以下代码:

var html = require("html");
var beautify_html = require('js-beautify').html;
var data = '<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span></h2>';
var beautyHtml= beautify_html(data);
fs.writeFile('test.html',beautyHtml, function (err) {});
var html=require(“html”);
var beautify_html=require('js-beautify').html;
var数据=“太棒了”;
var beautyHtml=美化html(数据);
writeFile('test.html',beautyHtml,function(err){});

但它只是停留在一行…我写的错了吗?还是我要补充点什么?感谢您的帮助

这个问题似乎与
js bestify

github页面上有几个相关的未解决问题:

如果将任意HTML粘贴到中,也可以看到此不起作用


如果将js beautify替换为,则在格式化为XML时,会得到所需的输出:

var fs = require('fs');
var pd = require('pretty-data').pd;
var data = '<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span></h2>';
var pdHtml= pd.xml(data);

fs.writeFile('test.html',pdHtml, function (err){});
var fs=require('fs');
var pd=require('pretty-data').pd;
var数据=“太棒了”;
var pdHtml=pd.xml(数据);
writeFile('test.html',pdHtml,function(err){});
导致

<h2>
  <strong>
    <a href="http://awesome.com">AwesomeCom</a>
  </strong>
  <span>is awesome</span>
</h2>



太棒了

你没有做错什么
js beautify
肯定有缺陷和局限性。你很可能遇到了其中的一个。你应该提出一个问题

也就是说,将所有元素放在单独的行上是否正确,比最初看起来要复杂一些
js beautify
比使用一系列正则表达式或将HTML视为XML的工具要准确得多,但它也很难在格式化HTML之前完全解析HTML,因此,一些看似微不足道的行为没有得到实现,因为工具没有足够的信息来安全地执行这些操作

示例1:HTML不是XML

例如,如果输入是XML,那么上面显示的所需格式化输出就可以了。但是,由于这是HTML,问题中显示的所需输出HTML将与输入显示不同

给定此HTML(示例输入):

给定此HTML(所需的输出):

给定输入的格式化输出HTML可能是以下任意一种:

<h2>
  <strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>
</h2>

<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span></h2>
示例3:接近“真实世界”输入

最后,让我们考虑一个更类似于输入的输入,在合理的地方有空间:

<h2>The <strong><a href="http://awesome.com">AwesomeCom</a></strong> <span>is awesome</span>!</h2>
示例3b:无效的“美化”HTML输出

有些人甚至会说下一个例子也可以,但我不太确定

<h2>
  The 
  <strong>
    <a href="http://awesome.com">AwesomeCom</a>
  </strong>
  <span>is awesome</span>!
</h2>

这个


太棒了!

它在
之间添加了一个以前没有的空格。布局引擎是否会在
之前和之后合并空间?如果CSS更改了所有标签的字体大小,该怎么办?在某些情况下,这可能是安全的,但会改变同样多的布局。

您可以从文件中读取,然后写入。它将保留格式,这比用字符串编写HTML更好(除非必须):


很抱歉,HTML不能像XML一样处理—元素之间的空间在许多情况下都有意义,具体取决于上下文。
AwesomeCom is awesome
<h2>
  <strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>
</h2>

<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span></h2>
<h2>The<strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!</h2>
<!-- Input --> 
<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!</h2>
<h2>The<strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!</h2>

<!-- Output --> 
<h2>
  <strong>
    <a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!
</h2>
<h2>
  The<strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!
</h2>
<h2>The <strong><a href="http://awesome.com">AwesomeCom</a></strong> <span>is awesome</span>!</h2>
<h2>The <strong><a href="http://awesome.com">AwesomeCom</a></strong> <span>is awesome</span>!</h2>

<h2>
  The <strong><a href="http://awesome.com">AwesomeCom</a></strong>
  <span>is awesome</span>!
</h2>

<h2>
  The 
  <strong><a href="http://awesome.com">AwesomeCom</a></strong>
  <span>is awesome</span>!
</h2>
<h2>
  The 
  <strong>
    <a href="http://awesome.com">AwesomeCom</a>
  </strong>
  <span>is awesome</span>!
</h2>
    fs.readFile(fs.realpathSync('input.html'), 'utf8', function (err, data){
        if (err) {
            return console.log(err);
        }
        fs.writeFile('output.html', data, function (err) {
            if (err) return console.log(err);
            console.log('File writing done');
        });
    });