我在 Create React App 和一个 PHP 文件中遇到了类似的情况。
Create React App 配置创建一个asset-manifest.json 文件,其中页面中所需的所有文件都列在entrypoints 键下。
"entrypoints": [
"static/js/runtime-main.bff00530.js",
"static/js/2.8bab6741.chunk.js",
"static/css/main.262e5e5f.chunk.css",
"static/js/main.e2f4dbf8.chunk.js"
]
在我的代码中,我正在执行以下操作(扩展 @krylov123 的 answer):
// get the original values
$manifest = file_get_contents("./asset-manifest.json");
$manifest_values = json_decode($manifest, true);
$entrypoints = $manifest_values['entrypoints'];
然后我创建了两个单独的数组:一个用于 css,另一个用于 js 文件。为此,我创建了一个辅助函数 filterPaths(您可以创建自己的):
// return only paths continaint a specific string
function filterPaths($paths, $value): array {
return array_filter($paths, function ($filename) use ($value): bool {
return strpos($filename, $value) !== false;
});
}
这里我创建了两个数组:
// filter '.css' files
$css_files = filterPaths($entrypoints, '/css/');
// filter '.js' files
$js_files = filterPaths($entrypoints, '/js/');
然后在 html 部分,我循环遍历两个数组,以便为 CSS 打印 link 标签和为 JavaScript 打印 script 标签。
这是使用blade的语法,但是你可以将它改编成普通的php:
@foreach($css_files as $link)
<link href="{{ $link }}" rel="stylesheet">
@endforeach
@foreach($js_files as $link)
<script src="{{ $link }}"></script>
@endforeach