fmy

这是一个符合要求的用户脚本示例,包含所有必要的声明

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         fmy 
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  这是一个符合要求的用户脚本示例,包含所有必要的声明
// @author       fmy
// @match        *://*/*
// @grant        none
// ==/UserScript==

const fs = require('fs');
const path = require('path');
const Terser = require('terser');

const DIR = path.join(__dirname, "bookmark");
const MIN_DIR = path.join(DIR, "min");
const OUTPUT_FILE = path.join(DIR, "README.md");
const BEGIN=`# 书签脚本集

**这个目录下记录了一些书签脚本,无需油猴插件就可以执行的\`js\`代码。**

- \`min.js\`:表示已压缩可在浏览器执行的\`js\`代码
- 脚本命名:以网站域名命名
- 没有 \`min\`:源代码

## 书签脚本如何使用?

去[这里](https://dtking.cn/blog/BookmarkScript/)学习一哈,或者自行AI,或网上搜索。


## 网站列表

`

// 确保 min 目录存在
if (!fs.existsSync(MIN_DIR)) {
	fs.mkdirSync(MIN_DIR, { recursive: true });
}

// 压缩单个文件并生成 Markdown 模板
const compressCode = async (src, dst) => {
	const origin = fs.readFileSync(src, 'utf8');
	const lines = origin.split(/\r?\n/);
	const info = lines.slice(0, 5);
	const name = (info[0]?.split(" ")[2] || 'Unnamed').trim();

	const { code } = await Terser.minify(origin, {
		compress: false,
		mangle: false,
		output: {
			comments: false,
		}
	});

	fs.writeFileSync(dst, code, "utf-8");

	return `### ${name}

\`\`\`js
${info.join('\n')}
\`\`\`

#### 书签代码

\`\`\`js
${code}
\`\`\``;
};

// 主程序
(async () => {
	try {
		const files = fs.readdirSync(DIR).filter(file => file.endsWith('.js'));
		const tasks = files.map(async file => {
			const { name, ext } = path.parse(file);
			const src = path.join(DIR, file);
			const dst = path.join(MIN_DIR, `${name}.min${ext}`);
			return await compressCode(src, dst);
		});

		const parts = await Promise.all(tasks);
		fs.writeFileSync(OUTPUT_FILE, BEGIN+parts.join('\n\n'), 'utf-8');
		console.log('✅ README.md 已生成');
	} catch (err) {
		console.error('❌ 处理过程中出错:', err);
	}
})();