fmy

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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);
	}
})();