HEX
Server: nginx/1.28.1
System: Linux VM-0-12-opencloudos 6.6.117-45.oc9.x86_64 #1 SMP Thu Dec 4 10:26:39 CST 2025 x86_64
User: www (1000)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.waciwang.com/wp-content/themes/miragev-main/assets/merge.js
/**
 * 自动合并CSS文件
 */
const fs = require('node:fs');
const path = require('node:path');


/**
 * 合并 Home 模块的 css 文件
 */
var cssTimer = null;
const cssFileArr = [
  './assets/css/src/variables.css',
  './assets/css/src/normalize.css',
  './assets/css/src/animation.css',
  './assets/css/src/common/common.css',
  './assets/css/src/common/form.css',
  './assets/css/src/common/button.css',
  './assets/css/src/common/pagination-wp.css',
  './assets/css/src/common/pagination.css',
  './assets/css/src/common/content-style.css',
  './assets/css/src/common/content-action.css',
  './assets/css/src/common/toast.css',
  './assets/css/src/common/mobile-nav.css',
  './assets/css/src/common/bar.css',
  './assets/css/src/common/dialog.css',
  './assets/css/src/common/modal.css',
  './assets/css/src/home/home.css',
  './assets/css/src/home/slider.css',
  './assets/css/src/home/hot.css',
  './assets/css/src/home/posts.css',
  './assets/css/src/home/links.css',
  './assets/css/src/article.css',
  './assets/css/src/page.css',
  './assets/css/src/comments.css',
  './assets/css/src/header.css',
  './assets/css/src/footer.css',
  './assets/css/src/widget.css',
  './assets/css/src/container.css',
  './assets/css/src/media/card.css',
  './assets/css/src/media/media.css',
  './assets/css/src/categories/banner.css',
  './assets/css/src/categories/category-list.css',
  './assets/css/src/categories/category-cards.css',
  './assets/css/src/users/index.css',
  './assets/css/src/users/user-center.css',
  './assets/css/src/users/star.css',
  './assets/css/src/dark.css',
  './assets/lib/ui/light-tip.css'
];

fs.watch('./assets/css/src', {
    recursive: true
}, (eventType, filename) => {
    clearTimeout(cssTimer);
    console.log(filename + ' 发生了 ' + eventType);
    cssTimer = setTimeout(() => {
        merge(cssFileArr,'./assets/css/style.css');
    }, 100);
});


/**
 * 合并文件的方法
 * @param  {arr} arrUrls 待合并的文件列表
 * @param  {str} strUrl  合并的文件路径,需要手动创建空文件
 * @param  {fun} filter  过滤器
 * @return 
 */
function merge(arrUrls, strUrl, filter) {
  var content = '';
  if (fs.existsSync(strUrl) == false) {
    console.error(strUrl + ' 不存在,合并失败');
    return;
  }
  // 遍历url并读取文件内容
  if (arrUrls && arrUrls.length && strUrl) {
    arrUrls.forEach(function(url) {
      if (fs.existsSync(url) == false) {
        return;
      }
      let st = fs.statSync(url);
      if (st.isFile()) {
        // 如果是文件
        content += fs.readFileSync(url);
      } else if (st.isDirectory()) {
        // 作为文件夹
        fs.readdirSync(url).forEach(function(filename) {
          if(filename.substring(0,1)=='.') return;
          let dir = path.join(url, filename);
          if (fs.statSync(dir).isFile()) {
            content += fs.readFileSync(dir);
          }
        });
      }
    });
    if (typeof filter == 'function') {
      content = filter(content);
    }
    // 写入新目录
    // 写入项目配置数据
    fs.writeFile(strUrl, content.trim(), function() {
      console.log('资源合并为 ' + strUrl + ' 成功');
    });
  }
};