缩小HTML,但不要用Gulp触及PHP

23c0lvtd  于 2022-12-16  发布在  Gulp
关注(0)|答案(2)|浏览(163)

问题是

我有很多 .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作为自动构建工具,并希望看到一个使用此工具和任何额外的包,因为他们需要的解决方案。

g2ieeal7

g2ieeal71#

gulp-htmlmin模块使用html-minifier模块,html-minifier模块有很多可用的选项(* 显示在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'));
});

在上面的代码中,我们使用ignoreCustomFragments和正则表达式/<\?[=|php]?[\s\S]*?\?>/来忽略以<?<?php开头并以?>结尾的代码。
默认情况下,html-minifier忽略php,所以你不必担心设置ignoreCustomFragments

编辑感谢amersk

一些你使用的php文件可能没有结束标签,例如很多WordPress文件就没有。另一种方法是使用以下代码:
ignoreCustomFragments: [/<\?[\s\S]*?(?:\?>|$)/]

2sbarzqh

2sbarzqh2#

这对我有用!

// 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'));
  });

;

相关问题