You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

借助gulp watch与browser-sync实现本地WordPress与线上站点同步咨询

我刚好折腾过类似的WordPress本地到线上同步工作流,结合你用Gulp Watch + BrowserSync的开发场景,分文件自动部署数据库同步两部分给你具体方案:

一、文件自动同步(含Sass编译部署)

核心思路是用Gulp监听文件变更,编译Sass后自动把增量文件同步到线上服务器,同时用BrowserSync刷新本地预览。

1. 安装必要依赖

先装Gulp相关插件,gulp-rsync比SFTP更适合增量同步(速度快),当然你也可以用gulp-sftp替代:

npm install gulp-sass browser-sync gulp-rsync --save-dev

2. 配置Gulp任务

修改你的gulpfile.js,加入以下任务(记得替换成你自己的本地/线上路径和服务器信息):

const gulp = require('gulp');
const sass = require('gulp-sass')(require('sass'));
const browserSync = require('browser-sync').create();
const rsync = require('gulp-rsync');

// 1. Sass编译任务:编译后同步到本地主题目录,同时刷新BrowserSync
gulp.task('sass', function() {
  return gulp.src('./wp-content/themes/your-theme/sass/**/*.scss')
    .pipe(sass().on('error', sass.logError))
    .pipe(gulp.dest('./wp-content/themes/your-theme/css'))
    .pipe(browserSync.stream());
});

// 2. 线上同步任务:增量同步主题文件到服务器
gulp.task('deploy', function() {
  return gulp.src('./wp-content/themes/your-theme/**/*')
    .pipe(rsync({
      root: './wp-content/themes/your-theme',
      hostname: '你的服务器IP/域名',
      username: 'SSH用户名',
      destination: '/服务器上WordPress主题的绝对路径',
      incremental: true, // 只传变更的文件,提升速度
      progress: true,
      exclude: ['.git', 'node_modules', '.DS_Store', 'sass'] // 排除不需要同步的目录/文件
    }));
});

// 3. 监听任务:整合编译、同步、本地刷新
gulp.task('watch', function() {
  // 初始化BrowserSync,代理你的本地WordPress站点(比如localhost:8080)
  browserSync.init({
    proxy: 'localhost:8080',
    open: true
  });

  // 监听Sass文件,变更时自动编译
  gulp.watch('./wp-content/themes/your-theme/sass/**/*.scss', gulp.series('sass'));
  // 监听主题下的PHP/JS/图片等文件,变更时同步到线上并刷新本地
  gulp.watch('./wp-content/themes/your-theme/**/*.{php,js,png,jpg}', gulp.series('deploy', browserSync.reload));
});

// 默认启动任务:先编译一次Sass,再开启监听
gulp.task('default', gulp.series('sass', 'watch'));

注意事项

  • 确保你的服务器开启了SSH服务,且本地能通过SSH密钥登录(避免每次输密码,更安全)
  • 如果用SFTP替代rsync,只需把gulp-rsync换成gulp-sftp,配置类似,不过增量同步效率会低一些

二、数据库同步方案

WordPress数据库同步的核心问题是本地/线上站点URL的替换,不然同步后会出现链接错误,分两种场景:

1. 手动同步(适合变更不频繁的场景)

  • 用phpMyAdmin导出本地数据库,然后导入线上数据库
  • 导入后,用WordPress插件比如Better Search Replace,搜索本地站点URL(比如http://localhost:8080),替换成线上URL(比如https://your-domain.com),记得勾选“替换GUID”选项

2. 自动同步(适合开发中频繁变更数据库的场景)

可以用Gulp结合mysqldump命令,实现一键导出本地数据库、替换URL、导入线上的自动化流程:

步骤1:安装依赖(需要本地和服务器都有MySQL命令行工具)

npm install dotenv --save-dev # 用来管理敏感信息,避免硬编码密码

步骤2:配置环境变量

在项目根目录创建.env文件:

# 本地数据库配置
LOCAL_DB_HOST=localhost
LOCAL_DB_USER=root
LOCAL_DB_PASS=your-local-db-password
LOCAL_DB_NAME=your-local-wp-db
LOCAL_SITE_URL=http://localhost:8080

# 线上数据库配置
REMOTE_DB_HOST=your-remote-db-host
REMOTE_DB_USER=remote-db-user
REMOTE_DB_PASS=your-remote-db-password
REMOTE_DB_NAME=remote-wp-db
REMOTE_SITE_URL=https://your-domain.com
REMOTE_SSH_USER=your-ssh-username
REMOTE_SSH_HOST=your-server-ip

步骤3:添加Gulp同步数据库任务

require('dotenv').config();
const exec = require('child_process').exec;

gulp.task('sync-db', function(cb) {
  const cmd = `mysqldump -h ${process.env.LOCAL_DB_HOST} -u ${process.env.LOCAL_DB_USER} -p${process.env.LOCAL_DB_PASS} ${process.env.LOCAL_DB_NAME} | sed 's/${process.env.LOCAL_SITE_URL}/${process.env.REMOTE_SITE_URL}/g' | ssh ${process.env.REMOTE_SSH_USER}@${process.env.REMOTE_SSH_HOST} "mysql -h ${process.env.REMOTE_DB_HOST} -u ${process.env.REMOTE_DB_USER} -p${process.env.REMOTE_DB_PASS} ${process.env.REMOTE_DB_NAME}"`;
  
  exec(cmd, function(err, stdout, stderr) {
    if (stdout) console.log('数据库同步输出:', stdout);
    if (stderr) console.log('同步警告/错误:', stderr);
    cb(err);
  });
});

使用方式

需要同步数据库时,直接在终端运行:

gulp sync-db

注意事项

  • 确保本地能通过SSH无密码登录服务器(配置SSH密钥对)
  • 不要把.env文件提交到Git,加入.gitignore
  • 如果觉得命令行方式太麻烦,也可以用付费插件WP Migrate DB Pro,支持一键同步数据库+媒体文件,自动处理URL替换,非常省心

内容的提问来源于stack exchange,提问作者asdf

火山引擎 最新活动