使用manifest.json返回php中的文件路径

时间:2018-06-25 17:18:47

标签: php json gulp

首先,请原谅我的方法,我敢肯定有很多更好的方法可以做到这一点,但是我是自学成才的,而且绝对不是专业人士:D

无论如何,我正在学习如何使用gulp-rev-rewrite修订资产,并且已经完成了大部分工作。

我的gulp任务全部正常工作,修订很好,我可以生成一个rev-manifest.json文件,其中包含修订后的文件名,例如:

"app.css": "app-df7223f44c.css"

我现在不知道如何使用manifest.json文件中的数据在我的php中指定文件路径。我从类似的gulp软件包中找到了another resource,该软件包包含一个我希望适应的.php函数:

<?php /**
 * @param  string  $filename
 * @return string
 */
function asset_path($filename) {
    $manifest_path = '../dist/rev-manifest.json';

    if (file_exists($manifest_path)) {
        $manifest = json_decode(file_get_contents($manifest_path), TRUE);
    } else {
        $manifest = [];
    }

    if (array_key_exists($filename, $manifest)) {
        return $manifest[$filename];
    }

    return $filename;
}
?>

我使用插入该功能

 <?php require 'require/filepaths.php';?>

然后尝试像这样使用文件路径:

 <link rel="stylesheet" href="<?php asset_path('dist/app.css');?>" rel="preload">

只有它不起作用,我很困惑。

返回的文件路径为:

<link rel="stylesheet" href="" rel="preload">

谁能指出我做错了什么?

我尝试手动在filepaths.php中包括一个有效的文件路径,所以我认为问题出在那个文件中吗?

任何建议都非常感谢。

2 个答案:

答案 0 :(得分:0)

发布清单后,我不确定您希望它如何工作。如果在清单var_dump之后json_decode清单,您会发现数组键是app.css而不是您要查找的dist/app.css

<?php asset_path('app.css');?>应该可以正常工作。

答案 1 :(得分:0)

感谢艾伦-想我现在有。

您说对了,因为该网址相对于网站根目录不正确。我找到了the answer here

基本上,我需要将dist/传递到清单的文件路径中,所以关键是对GULP配方的编辑:

gulp.task('revision', function() {
  return gulp.src(['dist/app.css', 'dist/app.js'])
    .pipe(gulp.dest('./dist'))
    .pipe(rev())
    .pipe(gulp.dest('./dist'))
    .pipe(rev.manifest({
      merge: true
    }))
    .pipe(revDel({ dest: 'dist' }))
    .pipe(gulp.dest('dist'))
    .pipe(notify({ message: 'Rev task complete' }));
});

收件人:

gulp.task('revision', function() {
  return gulp.src(['dist/app.css', 'dist/app.js'])
    .pipe(gulp.dest('./dist'))
    .pipe(rev())
    .pipe(gulp.dest('./dist'))
    .pipe(rename({
        dirname: "dist/" // rename dir in manifest
    }))
    .pipe(rev.manifest({
      merge: true
    }))
    .pipe(revDel({ dest: 'dist' }))
    .pipe(gulp.dest('dist'))
    .pipe(notify({ message: 'Rev task complete' }));
});