Webpack

Expose webpack modules to userscripts

当前为 2023-08-26 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/473902/1240869/Webpack.js

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

function isNonEmptyObj(obj) {
    if (obj === null || (typeof obj !== "function" && typeof obj !== "object")) {
        return false;
    }
    for (const key in obj) {
        return true;
    }
    return false;
}

// Based on `Webpack-module-crack` and `moduleRaid`
class Webpack {
    constructor(options) {
        const { moduleId, chunkId, entryPoint } = options || {};
        this.moduleId = moduleId || Math.random().toString(36).substring(2, 6);
        this.chunkId = chunkId || Math.floor(101 + Math.random() * 899);
        this.modules = {};
        this.data = [
            [this.chunkId],
            {
                [this.moduleId]: (module, exports, require) => {
                    const installedModules = require.c;
                    for (const id in installedModules) {
                        const exports = installedModules[id].exports;
                        if (isNonEmptyObj(exports)) {
                            this.modules[id] = exports;
                        }
                    }
                },
            },
            [[this.moduleId]],
        ];
        if (entryPoint) {
            this.inject(entryPoint);
        } else {
            this.inject("webpackJsonp");
        }
    }

    inject(entryPoint) {
        try {
            if (unsafeWindow) {
                unsafeWindow[entryPoint].push(this.data);
            } else {
                window[entryPoint].push(this.data);
            }
        } catch (err) {
            console.log(`Injection failed: ${err}`);
        }
    }
}