Greasemonkey 4.x:多.js文件管理及资源加载可行性咨询
嘿,你的这个认知基本是准确的,但也有不少变通方案能解决脚本拆分的问题,我给你详细说下:
你说的没错,Greasemonkey 4.0彻底重构了脚本存储逻辑——不再把脚本以本地文件的形式存放在磁盘目录里,而是将它们存储在浏览器的内部数据库中。这就直接导致你没法通过@require或@resource指令加载本地的.js/.css文件,因为这些指令要么只能加载远程URL资源,要么仅支持GM内部管理的资源,完全无法访问本地磁盘路径。
既然本地文件加载走不通,我们可以换这些思路来管理拆分的模块:
远程托管依赖模块
把拆分出来的功能模块上传到GitHub Gist、公共CDN或者自己的服务器上,然后通过@require指令加载对应的远程地址。举个例子:// @require https://gist.githubusercontent.com/yourusername/xxxxxx/raw/your-module.js这种方式最贴合GM的原生规范,操作简单;唯一的小缺点是依赖网络环境,而且模块更新后需要同步更新脚本里的URL。
用打包工具合并脚本
本地开发时按功能拆分文件,最终用打包工具把所有模块合并成一个完整的用户脚本。常用的工具比如rollup、webpack,或者专门的油猴脚本打包工具gm-bundler都能搞定。这些工具会帮你把分散的JS文件合并,同时保留脚本顶部的@require、@name等元数据,既满足了本地开发的模块化需求,又适配Greasemonkey的存储机制。动态注入小模块(临时方案)
如果只是少量小模块,可以把拆分的JS代码转成字符串,通过eval()或者动态创建<script>标签注入到页面;CSS则可以用GM提供的GM_addStyle()方法注入。不过这种方式不够优雅,调试起来比较麻烦,只适合临时的小功能拆分,不推荐大规模使用。切换到其他油猴扩展(可选)
虽然你问的是Greasemonkey,但还是提一句:Tampermonkey和Violentmonkey至今都保留了加载本地文件的支持(需要在扩展设置里开启“允许访问文件URL”的权限)。如果你的脚本用户群体不局限于Greasemonkey,这会是个更省心的选择。
内容的提问来源于stack exchange,提问作者Cren7ist

