0

0

thinkphp5(tp5)整合gulp到项目实现静态资源的压缩

PHP中文网

PHP中文网

发布时间:2018-05-28 21:30:14

|

2920人浏览过

|

来源于php中文网

原创

不知道大家是否会遇到每次代码提交都手动取消选中config.php和database.php的烦恼。(config.php文件线下线上打开关闭调试模式和显示关闭错误 database.php线下线上数据库的配置)
反正我以前是每次git提交代码都手动的取消他们的选中状态再提交的 ( svn的话可以把他们移动到忽略文件的位置 但git就算忽略了 修改后还是会弹出来让你提交...)。
这样先不说繁琐不繁琐 有时候忙着提交代码忘记取消他们就提交了这很正常
但是一旦提交到正式环境那后果真是灾难性的!
所以闲话不多说了 借着这次thinkphp5整合gulp到项目实现静态资源的合并、压缩、md5后缀 一起就把自己的解决方案写出来(大牛们有更好的解决方案欢迎探讨)。

先看看我的目录结构:
1500806894241411.png第一步

:打开Thinkphp5根目录下的 thinkphp\start 引导文件 添加以下代码:
// 定义资源和模板使用目录

// 定义资源和模板使用目录
if($_SERVER['HTTP_HOST'] == 'www.php.cn'){
    
    //控制文件的调用
    define('STATICS', '/dist');  //静态文件调用路径
    define('TEMPL', '../dist/');  //模板文件调用路径
    
    //控制是否需要显示错误信息
    define('IS_DEBUG', false);  //是否debug
    define('ERR_TPL', THINK_PATH . 'tpl' . DS . 'error.tpl');  //错误模板
    
    //数据库配置
    define('HOST_NAME', 'xxx.xx.xx.x');  //数据库地址
    define('USERNAME', 'xxx');  //用户名
    define('PASSWORD', 'xxxxx');  //密码
    
}else{
    
    //控制文件的调用
    define('STATICS', '/static/assets');
    define('TEMPL', '../template/');

    
    //控制是否需要显示错误信息
    define('IS_DEBUG', true);  //是否debug
    define('ERR_TPL', THINK_PATH . 'tpl' . DS . 'think_exception.tpl');  //错误模板
    
    //数据库配置
    define('HOST_NAME', '127.0.0.1');  //数据库地址
    define('USERNAME', 'xxx');  //用户名
    define('PASSWORD', 'xxx');  //密码
}

(注:xxx是需要根据自己的实际情况修改的数据) 

1、在index模块下的config.php文件增加或修改成以下代码:

//配置文件
return [
     'template' => [
        
         //模板路径
         'view_path'=> TEMPL,
         
        //定义模板布局
        'layout_on'     =>  true,
        'layout_name'   =>  'layout',
        'layout_item'   =>  '{__CONTENT__}'
        
    ],
];

2、在总的config.php文件中替换或增加以下代码:

// 应用调试模式
    'app_debug'              => IS_DEBUG,
    
// 视图输出字符串内容替换
    'view_replace_str'       => [
        '__STATIC__' => STATICS,
    ],
    
// 异常页面的模板文件
    'exception_tmpl'         => ERR_TPL,
    
// 显示错误信息
    'show_error_msg'         => IS_DEBUG,

3、然后所有的资源引用都用 __STATIC__ 代替资源路径:
例如:__STATIC__/js/jquery.min.js

以上是针对Thinkphp5的一些配置
以下开始整合gulp进thinkphp5项目

第二步;在thinkphp5项目根目录中创建 package.json;

立即学习PHP免费学习笔记(深入)”;

绘蛙AI修图
绘蛙AI修图

绘蛙平台AI修图工具,支持手脚修复、商品重绘、AI扩图、AI换色

下载
{
  "name": "zhuzong",
  "version": "0.0.1",
  "description": "资源鸟",
  "scripts": {},
  "author": "zhuzong",
  "license": "Apache2",
  "devDependencies": {
    "browser-sync": "^2.14.0",
    "del": "^2.2.1",
    "gulp": "^3.9.1",
    "run-sequence":"^1.2.2",
    "gulp-clean-css": "^2.0.12",
    "gulp-csscomb": "^3.0.7",
    "gulp-cleanhtml": "^1.0.1",
    "gulp-minify-inline-scripts":"0.0.6",
    "gulp-imagemin": "^3.0.2",
    "gulp-rev": "^7.1.0",
    "gulp-rev-collector": "^1.0.5",
    "gulp-uglify": "^2.0.0"
  }
}

第三步;在thinkphp5项目根目录中创建 gulpfile.js;

// gulpfile.js
var gulp = require('gulp');
    runSequence = require('run-sequence'), 
    clearnHtml  = require('gulp-cleanhtml'),
    minifyInline  = require('gulp-minify-inline-scripts'),
    imagemin = require('gulp-imagemin');
    uglify = require('gulp-uglify');
    cleanCss = require('gulp-clean-css');
    rev = require('gulp-rev');
    del = require('del');
    revCollector = require('gulp-rev-collector');
    browserSync = require('browser-sync').create(),
    reload      = browserSync.reload;
    
var dir = './bolg/dist';    
var dir2= './bolg/public/dist';    

//复制html
gulp.task('copyHtml', function(){
   return gulp.src('./bolg/template/**/*.html')
    .pipe(clearnHtml())
    .pipe(minifyInline())
    .pipe(gulp.dest(dir));    
});

//复制Css
gulp.task('copyCss',function(){
   return gulp.src(['./bolg/public/static/assets/css/*.css','./bolg/public/static/assets/demo/css/*.css'])
    .pipe(cleanCss({conpatibility: 'ie8'}))   
    .pipe(rev())        
    .pipe(gulp.dest(dir2+'/css'))        
    .pipe(rev.manifest())       
    .pipe(gulp.dest(dir+'/manifest/css'));
});

//复制字体
gulp.task('copyFont',function(){
   return gulp.src('./bolg/public/static/assets/fonts/*')
    .pipe(gulp.dest(dir2+'/fonts'))
});

//复制JS
gulp.task('copyJs', function(){
   return gulp.src(['./bolg/public/static/assets/js/*.js','./bolg/public/static/assets/demo/js/*.js'])
    .pipe(uglify())   
    .pipe(rev())
    .pipe(gulp.dest(dir2+'/js'))
    .pipe(rev.manifest())
    .pipe(gulp.dest(dir+'/manifest/js'));
});

//复制图片
gulp.task('copyImg', function () {
   return gulp.src('./bolg/public/static/assets/images/**/*')
    .pipe(imagemin())   
    .pipe(rev())
    .pipe(gulp.dest(dir2+'/images'))
    .pipe(rev.manifest())
    .pipe(gulp.dest(dir+'/manifest/images'));
});


//对html中的静态资源(css,js,image)进行MD5后的文件引用替换
gulp.task('rev', function(){
    return gulp.src([dir+'/manifest/**/*.json', dir+'/**/*.html'])     //找到json,和目标html文件路径
     .pipe(revCollector({
         replaceReved: true,
     }))     
     .pipe(gulp.dest(dir));
 });


 //监视文件,并进行自动操作 task : server
 gulp.task('server',function(){
    browserSync.init({
        proxy : 'http://www.blog.com',
        notify: false, // 刷新不弹出提示
    });
    
    gulp.watch('./bolg/template/**/*.html', ['html']);   
    gulp.watch('./bolg/public/static/assets/css/*.css', ['css']);
    gulp.watch('./bolg/public/static/assets/js/*.js', ['js']); 
    gulp.watch('./bolg/public/static/assets/images/**/*.{jpg,png}',['img']); 
});


//设置默认任务 task : default
gulp.task('default', function (done) {  
    condition = false;  
    //依次顺序执行  
    runSequence(  
    ['clear'],
    ['copyImg'],
    ['copyHtml'],
    ['copyCss'],
    ['copyFont'],
    ['copyJs'],
        ['rev'],  
        ['server'],   
        done);  
});


//html
gulp.task('html', function (done) {  
    condition = false;  
    //依次顺序执行  
    runSequence(  
    ['copyHtml'],
        ['rev'],  
        ['bwrel'],  
        done);  
});

//css
gulp.task('css', function (done) {  
    condition = false;  
    //依次顺序执行  
    runSequence(  
    ['copyCss'],
        ['rev'],  
        ['bwrel'],  
        done);  
});

//js
gulp.task('js', function (done) {  
    condition = false;  
    //依次顺序执行  
    runSequence(  
    ['copyJs'],
        ['rev'],  
        ['bwrel'],  
        done);  
});

//img
gulp.task('img', function (done) {  
    condition = false;  
    //依次顺序执行  
    runSequence(  
    ['copyImg'],
        ['rev'],  
        ['bwrel'],  
        done);  
});

//reload
gulp.task('bwrel', function(){
    gulp.watch(dir+'/**/*.html').on("change", reload);  
});


//清除开发文件夹(dist)
 gulp.task('clear', function(){
     del(dir);
     del(dir2);
 });

把 gulpfile.js 中的src 和 dist 变量替换为自己项目的实际目录;
把proxy 替换为自己的本地自定义域名;

第四步: 命令行运行如下命令(前提是已经安装好node.js和gulp ):

# 安装各种包
cnpm install
# 运行gulp
gulp

如果不出意外;会自动编译并打开浏览器了;

以下就是被压缩过的文件 标红的是经过MD5后的文件引用替换过的路径
到此为止thinkphp5整合gulp就介绍完了。有任何错误和不合适的地方欢迎指出,大家一起共同进步!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1937

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1277

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1181

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1400

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

vlookup函数使用大全
vlookup函数使用大全

本专题整合了vlookup函数相关 教程,阅读专题下面的文章了解更多详细内容。

28

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Redis基础课程
Redis基础课程

共6课时 | 1.7万人学习

memcache基础课程
memcache基础课程

共6课时 | 1.6万人学习

Redis基础视频课程
Redis基础视频课程

共7课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号