简体   繁体   中英

rollup.js: crypto.getRandomValues() not supported

I am working on an Obsidian plugin that requires bundling using rollup.js. This plugin needs to import inrupt solid libraries that, when imported, are causing the following error:

Error: crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported
    at rng (/Users/candide/work/sekund/solid-build-issues/main_rollup.js:16740:10)
    at v4 (/Users/candide/work/sekund/solid-build-issues/main_rollup.js:17186:53)
    at new Session (/Users/candide/work/sekund/solid-build-issues/main_rollup.js:23526:88)
    at Repro.<anonymous> (/Users/candide/work/sekund/solid-build-issues/main_rollup.js:23669:17)
    at step (/Users/candide/work/sekund/solid-build-issues/main_rollup.js:160:15)
    at Object.next (/Users/candide/work/sekund/solid-build-issues/main_rollup.js:111:11)
    at /Users/candide/work/sekund/solid-build-issues/main_rollup.js:83:65
    at new Promise (<anonymous>)
    at __awaiter (/Users/candide/work/sekund/solid-build-issues/main_rollup.js:65:9)
    at Repro.login (/Users/candide/work/sekund/solid-build-issues/main_rollup.js:23664:10)

When debugging the code, it turns out that the crypto constant is not defined. However, at the start of the generated bundle, I can see:

var crypto_1 = require("crypto");

So it looks like my problem basically boils down to rollup redefining global variables when it should not.

Indeed, using the typescript compiler ( tsc ) on the same source file outputs a perfectly working program.

Here's my rollup config:

import commonjs from "@rollup/plugin-commonjs";
import json from "@rollup/plugin-json";
import { nodeResolve } from "@rollup/plugin-node-resolve";
import typescript from "@rollup/plugin-typescript";

const banner = `/*
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
if you want to view the source visit the plugins github repository
*/
`;

export default {
    input: "src/main.ts",
    inlineDynamicImports: true,
    output: [
        {
            file: "main.js",
            sourcemap: "inline",
            format: "cjs",
            exports: "default",
            banner,
        },
    ],
    external: ["obsidian", "fs", "os", "path"],
    plugins: [json(), nodeResolve({ preferBuiltins: true }), commonjs(), typescript({ sourceMap: true })],
};

I created a repro repo at https://github.com/ckemmler/solid-build-issues

man this wrecked my brain for a bit, i managed to find a solution but i don't understand it 100%

please see the solution suggested in this comment https://github.com/uuidjs/uuid/issues/544#issuecomment-740394448

resolved the problem for me

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM