在某些使用场景中,我们不希望引用外部库、JavaScript 文件、CSS 文件等。
在这种情况下,我创建了一个应用程序,将库定位在一个静态位置,并通过编写 PHP 脚本生成一系列 <link> 和 <script> 标签。
这种方法试图简化和重用共同知识,以开始构建我们基于 PHP + Vue 的应用程序。 构建工具和这个 PHP 脚本之间的区别在于,基于脚本的解决方案轻便且易于扩展。构建工具笨重,需要安装一些依赖,并且还需要额外的知识。 PHP 模板和 Vuejs

如何使用
- 创建一个文件夹来保存您的应用程序
- 将源代码 “app.meta.json” 复制到您的应用程序文件夹中
- 将源代码 “vendor.php” 复制到您的应用程序文件夹或子文件夹中
- 在您的应用程序文件夹中创建 index.php
- 在 index.php 的头部调用 vendor。
Vendor php 参数
- 启用调试模式:
include_once($_SERVER["DOCUMENT_ROOT"]."/vendor/myphp/1.0.0/vendor.php?debug=1
源代码
以下是前几章提到的源代码文件。
app.meta.json
{
"description": "Science Olypaid - Fast Facts",
"dependencies": {
"jquery":"3.4.1",
"jqueryui":"1.13.2",
"boxicons":"2.1.4",
"localforage":"1.10.0",
"layer":"3.5.4",
"keymaster": "1.6.3",
"moment": "2.24.0",
"dragtable":"2.0.15",
"data-set":"0.11.8",
"bootstrap":"5.0.2",
"bootstrap-icons":"1.10.5",
"loglevel":"1.8.1",
"vue-typed-js": "0.2.0",
"vue-smart-widget": "2.6.10",
"vue":"2.6.14",
"vue-i18n":"5.0.3",
"element-ui":"2.5.14",
"jquery-treegrid":"0.3.0",
"bootstrap-table":"1.22.1",
"tableexport.jquery.plugin":"1.28.0",
"axios":"0.15.3",
"vue-axios":"2.0.2",
"echarts":"5.4.3",
"vue-echarts":"6.6.1",
"myjs":"0.0.1"
},
"scripts": {
"collect": "dev/collect.csh"
},
"entries": {
"index": {
"file": "index.php",
"version": "0.0.2",
"dependencies": {
},
"assets": {
"0.0.2": {
"css": [
"./myapp.css"
],
"js": [
],
"php": []
}
},
"ignore": {
}
}
}
}
vendor.php
<?php
if (isset($_SERVER["REQUEST_URI"]) && preg_match("/errmsg=((1)|(yes))/",$_SERVER["REQUEST_URI"])) {
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL) ;
} else {
error_reporting(1) ;
}
if (! function_exists(url_origin)) {
function url_origin( $s, $use_forwarded_host = false ) {
$ssl = ( ! empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' );
$sp = strtolower( $s['SERVER_PROTOCOL'] );
$protocol = substr( $sp, 0, strpos( $sp, '/' ) ) . ( ( $ssl ) ? 's' : '' );
$port = $s['SERVER_PORT'];
$port = ( ( ! $ssl && $port=='80' ) || ( $ssl && $port=='443' ) ) ? '' : ':'.$port;
$host = ( $use_forwarded_host && isset( $s['HTTP_X_FORWARDED_HOST'] ) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset( $s['HTTP_HOST'] ) ? $s['HTTP_HOST'] : null );
$host = isset( $host ) ? $host : $s['SERVER_NAME'] . $port;
return $protocol . '://' . $host;
}
}
if (! function_exists(full_url)) {
function full_url( $s, $use_forwarded_host = false ) {
return url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI'];
}
}
if (!isset($app_dev)) {
$app_dev = array() ;
}
$app_devstat["vendor"] = false ;
$phpscr_root_array = glob("{../app.icsteve.com,../../app.icsteve.com,.}",GLOB_BRACE+GLOB_NOSORT) ;
$phpscr_root = realpath($phpscr_root_array[0]) ;
if (!isset($app_entry_name)) {
$app_entry_name = preg_replace("/vendor/","index",preg_replace("/.php$/","",basename($_SERVER["SCRIPT_FILENAME"]))) ;
}
if (!isset($app_root)) {
$app_root = realpath(".") ;
}
if (basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
include_once(__DIR__."/"."get_argument.php") ;
$args=get_argument() ;
$is_direct_call = true ;
$app_root = dirname(dirname(dirname(dirname(__DIR__)))) ;
if (isset($args["app_meta"])) {
$app_meta = $app_root."/".$args["app_meta"] ;
}
if (isset($args["app_entry_name"])) {
$app_entry_name = $args["app_entry_name"] ;
}
if (isset($args["app_devstat"])) {
$app_devstat["vendor"] = $args["app_devstat"] ;
}
} else {
$is_direct_call = false ;
}
echo "<!-- App entry name: ".$app_entry_name." -->".PHP_EOL ;
if (isset($app_root) && !isset($app_meta)) {
$fileList = get_included_files();
$tmpidx = count($fileList)-2 ;
$parent = $fileList[$tmpidx];
$app_meta_filename = preg_replace("/\.php/",".meta.json",basename($parent)) ;
$app_meta = $app_root."/".$app_meta_filename ;
}
if (! file_exists($app_meta)) {
$app_meta = $app_root."/app.meta.json" ;
}
if (! file_exists($app_meta)) {
# Exit php ;
}
$tmpurl = full_url($_SERVER) ;
$tmparr = explode("/",$tmpurl) ;
$tmparr = array_splice($tmparr,0,sizeof($tmparr)-1) ;
$pageroot_url = implode("/",$tmparr) ;
$tmpurl2 = preg_replace("/app.icsteve.com.*/","/app.icsteve.com/",$tmpurl) ;
$app_root_url = preg_replace("/.*app.icsteve.com\//","$tmpurl2",realpath($app_root)) ;
#echo $app_root_url.PHP_EOL ;
if ($app_devstat["vendor"]) {
echo "<!-- App root url: ".PHP_EOL." tmpurl: ".$tmpurl.PHP_EOL." tmpurl2:".$tmpurl2.PHP_EOL." app_root_url: ".$app_root_url.PHP_EOL."-->".PHP_EOL ;
}
if (isset($_SERVER["SERVER_NAME"])) {
$full_url = full_url($_SERVER) ;
} else {
$full_url = "." ;
}
$vendor_common = array("url"=>"http://cdn.icsteve.com/vendor") ;
$phpscr_dir = realpath($phpscr_root) ;
$vendor_server_path_array = glob("{".$phpscr_dir."/vendor,".$phpscr_dir."/vendor}",GLOB_BRACE+GLOB_NOSORT) ;
$vendor_server_path = $vendor_server_path_array[0] ;
$vendor_url_array = glob("{./vendor,../vendor,../../vendor,../../../vendor,../../../../vendor}",GLOB_BRACE+GLOB_NOSORT) ;
if (count($vendor_url_array)>0) {
$vendor_url = $vendor_url_array[0] ;
} else {
$vendor_url = "." ;
}
$vendor_url = $pageroot_url."/".$vendor_url ;
$metajson = json_decode(file_get_contents($app_meta),true) ;
#print_r($metajson) ;
# $myfile = fopen("copy.csh", "w") ;
$js_files = array() ;
$css_files = array() ;
$com_files = array() ;
$croot_url = preg_replace("#/app.icsteve.com/.*$#","/app.icsteve.com/",$app_root_url) ;
$croot_url = preg_replace("#^.*app.icsteve.com/#","$croot_url",realpath($app_root)) ;
#echo "<!--DIR: ".realpath($app_root)."-->".PHP_EOL ;
echo "<!-- Dependency list is from ".$croot_url."/".basename($app_meta)." -->".PHP_EOL ;
foreach ($metajson["dependencies"] as $dependency=>$version) {
#fwrite($myfile,$dependency.PHP_EOL) ;
#echo "Checking ".$vendor_server_path."/".$dependency."/meta.json\n ".$dependency." -> $version".PHP_EOL ;
$vendor_metajson = json_decode(file_get_contents($vendor_server_path."/".$dependency."/meta.json"), true) ;
# check license
#print_r($vendor_metajson) ;
$vendor_license = $vendor_metajson["assets"][$version]["license"] ;
if (! isset($vendor_metajson["assets"][$version]["css"])) {
echo "<!-- Check local $dependency => $version => css failed -->".PHP_EOL ;
if (isset($vendor_common["css"][$dependency][$version])) {
foreach ($vendor_common["css"][$dependency][$version] as $css_file) {
array_push($css_files,$css_file) ;
array_push($com_files,$css_file) ;
}
echo "<!-- Match the common css files for ".$dependency."/".$version."-->".PHP_EOL ;
}
} else {
$vendor_css = $vendor_metajson["assets"][$version]["css"] ;
foreach ($vendor_css as $css_file) {
if (isset($vendor_metajson["ignore"][$dependency])) {
if (in_array($css_file,$vendor_metajson["ignore"][$dependency])) {
continue ;
}
}
#echo '<link href="'.$vendor_url.'/'.$dependency."/".$version."/".$css_file.'" rel="stylesheet" crossorigin="anonymous" type="text/css">'.PHP_EOL ;
#echo $vendor_server_path."/".$dependency."/".$version."/".$css_file.PHP_EOL ;
array_push($css_files,$dependency."/".$version."/".$css_file) ;
}
}
if (! isset($vendor_metajson["assets"][$version]["js"]) ) {
if (isset($vendor_common["js"][$dependency][$version])) {
foreach ($vendor_common["js"][$dependency][$version] as $js_file) {
array_push($js_files,$js_file) ;
array_push($com_files,$js_file) ;
}
echo "<!-- Match the common js files for ".$dependency."/".$version."-->".PHP_EOL ;
}
echo "<!-- Check local $dependency => $version => js failed -->".PHP_EOL ;
} else {
$vendor_js = $vendor_metajson["assets"][$version]["js"] ;
foreach ($vendor_js as $js_file) {
# ignore list
if (isset($vendor_metajson["ignore"][$dependency])) {
if (in_array($js_file,$vendor_metajson["ignore"][$dependency])) {
continue ;
}
}
#echo '<script src="'.$vendor_url.'/'.$dependency."/".$version."/".$js_file.'" type="text/javascript"></script>'.PHP_EOL;
#echo $vendor_server_path."/".$dependency."/".$version."/".$js_file.PHP_EOL ;
array_push($js_files,$dependency."/".$version."/".$js_file) ;
}
}
}
if (isset($metajson["assets"])) {
$app_version = $metajson["version"] ;
$app_css = $metajson["assets"][$app_version]["css"] ;
$app_js = $metajson["assets"][$app_version]["js"] ;
} elseif (isset($metajson["entries"][$app_entry_name]["assets"])) {
$app_version = $metajson["entries"][$app_entry_name]["version"] ;
$app_css = $metajson["entries"][$app_entry_name]["assets"][$app_version]["css"] ;
$app_js = $metajson["entries"][$app_entry_name]["assets"][$app_version]["js"] ;
} else {
$app_css = array() ;
$app_js = array() ;
}
foreach (array_diff($css_files,$app_css) as $css_file) {
if (in_array($css_file,$com_files)) {
$tmpurl = $vendor_common["url"]."/".$css_file ;
} else {
$tmpurl = $vendor_url."/".$css_file ;
}
#echo '<link href="'.$tmpurl.'" rel="stylesheet" crossorigin="anonymous" type="text/css">'.PHP_EOL ;
echo '<link href="'.$tmpurl.'" rel="stylesheet" type="text/css">'.PHP_EOL ;
}
foreach (array_diff($js_files,$app_js) as $js_file) {
if (in_array($js_file,$com_files)) {
$tmpurl = $vendor_common["url"]."/".$js_file ;
} else {
$tmpurl = $vendor_url."/".$js_file ;
}
echo '<script src="'.$tmpurl.'" type="text/javascript"></script>'.PHP_EOL;
}
foreach ($app_css as $css_file) {
#echo '<link href="'.$app_root_url."/assets/vendor/".$css_file.'" rel="stylesheet" crossorigin="anonymous" type="text/css">'.PHP_EOL ;
echo '<link href="'.$app_root_url."/assets/vendor/".$css_file.'" rel="stylesheet" type="text/css">'.PHP_EOL ;
}
foreach ($app_js as $js_file) {
echo '<script src="'.$app_root_url."/assets/vendor/".$js_file.'" type="text/javascript"></script>'.PHP_EOL;
}
# fclose($myfile) ;
if (isset($metajson["assets"][$app_version]["php"])) {
$app_php = $metajson["assets"][$app_version]["php"] ;
foreach ($app_php as $php_file) {
include_once($php_file) ;
}
}
echo '<link rel="icon" type="image/x-icon" href="'.$app_root_url.'/assets/img/fav.ico">' ;
?>
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...