Node.js 在NodeJS中修改HTML文件
让我先说两件事。我目前正在使用grunt来完成这些任务,我也知道Yeoman有我想要的东西。我真的很喜欢约曼,但它只是有点太固执己见的这个特定项目,我正在工作 因此,我有以下HTML文件:Node.js 在NodeJS中修改HTML文件,node.js,Node.js,让我先说两件事。我目前正在使用grunt来完成这些任务,我也知道Yeoman有我想要的东西。我真的很喜欢约曼,但它只是有点太固执己见的这个特定项目,我正在工作 因此,我有以下HTML文件: <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<!-- START-CSS-MIN:css/build/min.css -->
<link rel="stylesheet" href="css/bootstrap/bootstrap-2.1.1.css">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/boilerplate.css">
<!-- END-CSS-MIN -->
<!-- START-JS-MIN:js/build/modernizr.js -->
<script src="js/libraries/modernizr.js"></script>
<!-- END-JS-MIN -->
</head>
<body>
<!--[if lt IE 7]>
<p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p>
<![endif]-->
<p>Hello world! This is a basline HTML5 template (based on HTML5 Boilerplate).</p>
<!-- START-JS-MIN:js/build/libraries.js -->
<script src="js/libraries/underscore.js"></script>
<script src="js/libraries/jquery/jquery.js"></script>
<!-- END-JS-MIN -->
</body>
</html>
你好,世界!这是一个basline HTML5模板(基于HTML5样板)
现在您可以看到CSS-MIN和JS-MIN注释。现在我已经有了一个定制的grunt构建任务,它可以正确地收集注释中的所有文件(使用htmlparser),然后直接根据注释缩小和压缩这些文件。构建过程的最后一步是创建HTML文件的新版本(供生产使用),用新文件替换注释。例如,上面的代码将转换为:
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="css/build/min.css">
<script src="js/build/modernizr.js"></script>
</head>
<body>
<!--[if lt IE 7]>
<p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p>
<![endif]-->
<p>Hello world! This is a basline HTML5 template (based on HTML5 Boilerplate).</p>
<script src="js/build/libraries.js"></script>
</body>
</html>
你好,世界!这是一个basline HTML5模板(基于HTML5样板)
我的问题是如何在NodeJS中做到这一点?htmlparser NPM模块非常适合解析HTML,但是我现在需要一些东西来修改HTML(删除和添加特定位置的某些元素)。关于如何在NodeJS代码中实现这一点,有什么好的软件包/教程吗?我不太确定这对注释行是否有帮助,但这应该比DOM参考更不需要解决 考虑使用: 还有其他选择。(https://github.com/joyent/node/wiki/modules)您可以使用 下面的代码将精确地生成您提供的输出(除了一些较小的空格差异)
const$=require('cheerio').load(inputtml);
//返回一个筛选函数,该函数使用提供的索引选择注释
const commentRemovalFilter=(commentIndexes)=>{
让commentIndex=-1;
返回(索引,节点)=>{
const isComment=node.type=='comment';
if(isComment)commentIndex++;
返回isComment&&commentIndex.includes(commentIndex);
}
}
$('head').contents().filter(commentRemovalFilter([0,1,2,3]).remove();
$('head link')。删除();
$(“头脚本”).remove();
//Cheerio尊重此处提供的空白
$('head')。追加(`
`)
$('body').contents().filter(commentRemovalFilter([1,2])).remove();
$('body script').remove();
$('body')。追加(`
`)
console.log($.html())
输出:
你好,世界!这是一个basline HTML5模板(基于HTML5样板)
您解决过这个问题吗?我正在做一些类似的事情,最后我用了很酷的谢谢!我只是看着谢里欧。你有没有可能把代码开源?看起来是一个很好的工具。我开始构建完全相同的东西。代码并没有很好地打包,但是你可以在这个文件中查看构建任务:啊,谢谢!这将节省我很多时间:)