如何使用节点fs将代码段添加到HTML

我想使用节点fs命令行工具将代码段添加到html文件中。 我看到这个解决scheme如何使用node.js添加到特定位置的文件? 但它使用位置来追加到文件。

我有这个HTML片段

<html><body><h1>hello world</body></html> 

我想追加

 <script>console.log('hello world')</script> 

在结束标签之前。 我想输出是这样的

 <html><body><h1>hello world</h1><script>console.log('hello world')</script></body></html> 

为什么不使用正则expression式?

 fs = require('fs') fs.readFile('./test.html', 'utf8', function (err,data) { if (err) { return console.log(err); } var toPrepand = "<script>console.log('hello world')</script>"; data = data.replace(/\<\/body>/g, toPrepand + '</body>'); console.log(data); }); 

您不必考虑在哪里放置 – 因为您已经说过 – 就在</body>标记之前。

之后,只需将新的数据写入该HTML文件。

如果你还想知道如何直接写下你的文件:

 var fs = require('fs') fs.readFile('./test.html', 'utf8', function (err,data) { if (err) { return console.log(err); } var toPrepand = "<script>console.log('hello world')</script>"; var result = data.replace(/\<\/body>/g, toPrepand + '</body>'); fs.writeFile('./test.html', result, 'utf8', function (err) { if (err) return console.log(err); }); }); 

有许多选项可以这样做 – find位置或使用HTMLparsing器或者简单的stringreplace该string。

你可以使用简单的string操作来实现这一点:

 var initialString = '<html><body><h1>hello world</body></html>'; var insert = '<script>console.log("hello world")</script>'; 

然后使用indexOffind位置:

var pos = initialString.indexOf('</body>');

切片和连接string:

var output = [initialString.slice(0, pos), insert, initialString.slice(pos)].join('')

并使用当然输出:-)

如果你想要更具扩展性的东西,你也可以看一下Node的任何HTMLparsing器/虚拟DOM实现(比如jsdom https://github.com/tmpvar/jsdom

我想使用“cheerio”节点包来做到这一点。 https://github.com/cheeriojs/cheerio

这真的很有用,就像使用jQuery一样。