• sandalbucket@lemmy.world
    link
    fedilink
    arrow-up
    10
    ·
    6 months ago

    I’ve been zipping things all day. Because it’s only one blob in the container, and then you can use website_run_from_package, which is just about the only way to get azure functions stood up via infra-as-code.

    But whatever unzip thing they use sure isn’t the linux default, because it doesn’t support symlinks. And pnpm uses almost exclusively symlinks, to point to its central package store, so re-installing doesn’t take 8 years like it does with npm.

    But that’s fine, because zip will follow symlinks and bake the actual files in, in place - which is pretty slick. But then azure functions package resolver can’t seem to figure out what the hell is going on, because it’s still putting dependencies in node_modules/.pnpm.

    So we pass —shamefully-hoist, which is a great name for a flag, which puts all the things at the top level of node_modules, and now zip works, and azure works - but each dependency also comes with its own node_modules, with another symlink to a package that’s already at the top level. So it works, but it’s 10x bigger than it needs to be - 6.4 MB instead of 668 KB.

    Fortunately we can use our build script to populate a .npmrc file, and set node-linker to hoisted, at which point pnpm will mimic npm with no symlinks at all - small, efficient, and dumb enough that the azure functions runtime can figure out how to deal with it.

    It took me 4 hours to debug this mess.

    All that to say, yes, a weighted blanket would be downright delightful right now, but please keep the zip files away from me