Javascript 缩小HTML,但不要';不要狼吞虎咽 问题

Javascript 缩小HTML,但不要';不要狼吞虎咽 问题,javascript,php,html,gulp,minify,Javascript,Php,Html,Gulp,Minify,我有很多.php文件,大部分都包含HTML,但顶部还有一些php行(例如表单触发器代码或类似代码)。所以他们看起来像 <?php if($someValue){ //doSth } //more content ?> <!DOCTYPE html> <html lang="de"> <head> <title>My Website</title> <meta name="viewport" co

我有很多.php文件,大部分都包含HTML,但顶部还有一些php行(例如表单触发器代码或类似代码)。所以他们看起来像

<?php
if($someValue){
    //doSth
}
//more content
?>
<!DOCTYPE html>
<html lang="de">
<head>
    <title>My Website</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>
<!-- Content and scripts here -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
</body>
</html>

我的网站

目标 我的目标是缩小HTML(甚至可能是内联javascript,但这只是一点额外内容),而不触及顶部的PHP。 我正在使用Gulp作为自动构建工具,并希望看到使用此工具的解决方案以及所需的任何额外软件包。

该模块使用该模块,该模块有许多可使用的选项(显示在其npmjs.com和github页面上)。我们将关注的选项是
ignoreCustomFragments

var gulp = require(gulp),
    htmlmin = require(gulp-htmlmin);

gulp.task('htmltask', function(){
  return gulp.src(['./dev/*.html','./dev/*.php'])
      .pipe(htmlmin({
        collapseWhitespace: true,
        ignoreCustomFragments: [ /<%[\s\S]*?%>/, /<\?[=|php]?[\s\S]*?\?>/ ]
      }))
      .pipe(gulp.dest('./site'));
});
var gulp=require(gulp),
htmlmin=需要(吞咽htmlmin);
gulp.task('htmltask',function(){
返回gulp.src(['./dev/*.html','./dev/*.php'])
.管道(htmlmin)({
拼贴空白:对,
ignoreCustomFragments:[//,//]
}))
.管道(大口目的地(“/现场”);
});
在上面的代码中,您可以看到我们正在使用带有正则表达式的
ignoreCustomFragments
来忽略以
开头的代码

默认情况下,HTMLminifier忽略php,因此您不必担心设置
ignoreCustomFragments

var gulp = require(gulp),
    htmlmin = require(gulp-htmlmin);

gulp.task('htmltask', function(){
  return gulp.src(['./dev/*.html','./dev/*.php'])
      .pipe(htmlmin({
        collapseWhitespace: true,
        ignoreCustomFragments: [ /<%[\s\S]*?%>/, /<\?[=|php]?[\s\S]*?\?>/ ]
      }))
      .pipe(gulp.dest('./site'));
});
编辑 谢谢阿默斯克

您使用的某些php文件可能没有结束标记,例如许多WordPress文件没有。另一种方法是使用以下内容:

ignoreCustomFragments:[/|$)/]

这对我有用

// Gulp.js configuration
var

  // modules
  gulp = require('gulp'),
  newer = require('gulp-newer'),
  htmlmin = require('gulp-htmlmin')

  // development mode?
  devBuild = (process.env.NODE_ENV !== 'production'),

  // folders
  folder = {
    src: 'src/',
    build: 'build/'
  }

  gulp.task('minify', () => {
     return gulp.src('src/*.html')
     .pipe(htmlmin({ collapseWhitespace: true }))
     .pipe(gulp.dest('dist'));
  });

;

你考虑过使用吗?内联JS可能很难最小化,尤其是当PHP标记散布在两者之间时,最简单的方法是尽可能避免使用内联JS。@Terry是的,我已经查看了该包,但我不确定它是否支持HTML文件中的PHP。但我还没有时间去测试它。如前所述,内联js的问题只是一点额外的问题,我也可以不用它。我的主要问题是一开始的PHP块(有时在HTML之间),但为什么呢?这是源代码,我想您希望保持其可读性,并缩小应用程序生成的输出,而不是代码。你想混淆它吗?@michaJlS我想缩小HTML以减小文件的大小并缩短页面的加载时间。如果你的模板中有PHP代码,那么这些代码将在以后由PHP解释,因此应该在PHP中动态修改,或者由http服务器修改。我将其用于我的正则表达式,允许在文件末尾使用未关闭的php标记
ignoreCustomFragments:[/|$)/]
这一点很好。我注意到在不使用关闭php标记时出现了吞咽错误,但是,在文件末尾没有关闭php标记是很常见的。您应该根据amersk的建议更新答案。我在wordpress上使用它,它到处都是未关闭的php标记