首先,请原谅我的方法,我敢肯定有很多更好的方法可以做到这一点,但是我是自学成才的,而且绝对不是专业人士: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
中包括一个有效的文件路径,所以我认为问题出在那个文件中吗?
任何建议都非常感谢。
答案 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' }));
});