如何使用节点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一样。