Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在NodeJS中修改HTML文件_Node.js - Fatal编程技术网

Node.js 在NodeJS中修改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"> <

让我先说两件事。我目前正在使用grunt来完成这些任务,我也知道Yeoman有我想要的东西。我真的很喜欢约曼,但它只是有点太固执己见的这个特定项目,我正在工作

因此,我有以下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">

        <!-- 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样板)


您解决过这个问题吗?我正在做一些类似的事情,最后我用了很酷的谢谢!我只是看着谢里欧。你有没有可能把代码开源?看起来是一个很好的工具。我开始构建完全相同的东西。代码并没有很好地打包,但是你可以在这个文件中查看构建任务:啊,谢谢!这将节省我很多时间:)