Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Link transitive dependencies into node_modules #54

Open
sternenseemann opened this issue Jan 9, 2021 · 5 comments
Open

Link transitive dependencies into node_modules #54

sternenseemann opened this issue Jan 9, 2021 · 5 comments
Assignees

Comments

@sternenseemann
Copy link
Collaborator

It seems like we need to link transitive dependencies into the top-level node_modules directory because JavaScript's import routines are all kinds of broken.

The solution is to implement a simple “link transitive dependencies” subcommand for node-package-tool which optionally can copy the dependencies (in case symlinks are a problem for a particular package).

What remains to be found out is the precise algorithm yarn uses for building node_modules, mainly how we can solve different versions of packages being present at the same level of the dependency tree.

@sternenseemann sternenseemann self-assigned this Jan 9, 2021
@Profpatsch
Copy link
Owner

Do you have a minimal reproduction of this problem?

@sternenseemann
Copy link
Collaborator Author

sternenseemann commented Jan 9, 2021

A bit messy, but this is an use case we want to support (running stuff at build time) which doesn't work nicely yet with buildNodePackage. I'm pretty sure such problems also occur more classical node packages:

let
  pkgs = import <nixpkgs> { };

  yarn2nix = import (pkgs.fetchFromGitHub {
    owner = "Profpatsch";
    repo = "yarn2nix";
    rev = "2eb5647049bde3301a005e6bc9f9ea330ed0e13d";
    sha256 = "0g875g4mhpw9vga1fq89sfwdd0gvnzfnn8y8nkbkcrw059k970rj";
  }) { };
  nixLib = yarn2nix.nixLib;

  packageJson = pkgs.writeText "package.json" ''
    {
      "name": "test",
      "version": "0.1.0",
      "devDependencies": {
        "parcel-bundler": "^1.12.4"
      }
    }
  '';

  yarnLock = pkgs.fetchurl {
    url = "https://gist.githubusercontent.com/sternenseemann/a6d2b9a30dd8c4602529459134a7a9b1/raw/147a9a3a88375147fc38bbfeee3ec4206fb35bc9/yarn.lock";
    sha256 = "1nsjg0rwm7b785l03wxdi7anhwwlw58l0i3whsvb015aihi35ksr";
  };

  pkgSrc = pkgs.runCommandLocal "frontend" {} ''
    mkdir $out
    ln -s ${packageJson} $out/package.json
    ln -s ${yarnLock} $out/yarn.lock

    cat > $out/index.html <<EOF
    <!doctype html>
    <html><head><meta charset="utf-8"><title>test</title></head>
      <body>
        nope
        <script src="main.js"></script>
      </body>
    </html>
    EOF

    cat > $out/main.js <<EOF
    console.log("lol")
    EOF
  '';

  template = nixLib.callPackageJson packageJson {};
  lock = nixLib.callYarnLock yarnLock {};
in {
  yarn2nixBuild =
    let
      tpl = template (nixLib.buildNodeDeps lock);
      linked = nixLib.linkNodeDeps {
        name = tpl.key.name;
        dependencies = tpl.nodeBuildInputs;
      };
    in pkgs.stdenv.mkDerivation {
      inherit (tpl) version;
      pname = tpl.key.name;
      src = pkgSrc;

      buildPhase = ''
        export PATH="${linked}/.bin:$PATH"
        parcel build index.html --out-dir=dist
      '';

      installPhase = ''
        cp dist $out
      '';
    };

  inherit pkgSrc;
}

If you run nix-build -A yarn2nixBuild, you get the following error:

building
(node:17) UnhandledPromiseRejectionWarning: Error: Cannot find module 'babel-types'
Require stack:
- /nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4/src/Asset.js
- /nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4/src/assets/RawAsset.js
- /nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4/src/Parser.js
- /nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4/src/Bundler.js
- /nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4/index.js
- /nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4/src/cli.js
- /nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4/bin/cli.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
    at Function.Module._load (internal/modules/cjs/loader.js:841:27)
    at Module.require (internal/modules/cjs/loader.js:1025:19)
    at require (/nix/store/02yfal8q6vx2md651ds7x99spb5rm3v3-v8-compile-cache-2.2.0/v8-compile-cache.js:159:20)
    at Object.<anonymous> (/nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4/src/Asset.js:12:11)
    at Module._compile (/nix/store/02yfal8q6vx2md651ds7x99spb5rm3v3-v8-compile-cache-2.2.0/v8-compile-cache.js:192:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Module.require (internal/modules/cjs/loader.js:1025:19)
(node:17) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:17) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
installing
cp: cannot stat 'dist': No such file or directory
builder for '/nix/store/5nlnzyi3xbfylasrai2fjkzm0sykasp2-test-0.1.0.drv' failed with exit code 1
error: build of '/nix/store/5nlnzyi3xbfylasrai2fjkzm0sykasp2-test-0.1.0.drv' failed

This is because of a weird traversal parcel does to discover other packages. If you use yarn however, it works:

fish> cp --no-preserve=ownership,mode -r (nix-build yarn2nix-transitive.nix -A pkgSrc) test
fish> cd test && nix-shell -p yarn
nix-shell $ yarn install
nix-shell $ yarn run parcel build --out-dir=dist index.html
# works without a nasty stack trace

Below are a directory listing of the node_modules generated by yarn2nix and yarn respectively.

yarn2nix
fish> ls -lah /nix/store/nr69v1rxs30s6h30b7ibphmvid5gszi1-test-node_modules/
total 4.0K
dr-xr-xr-x 1 root root     36 Jan  1  1970 .
drwxrwxr-t 1 root nixbld 3.6M Jan  9 20:03 ..
dr-xr-xr-x 1 root root     12 Jan  1  1970 .bin
lrwxrwxrwx 1 root root     65 Jan  1  1970 parcel-bundler -> /nix/store/sq6sskky5rb6x2m749s10k5cqnv475bj-parcel-bundler-1.12.4
yarn
fish> ls -lah test/node_modules
total 124K
drwxr-xr-x 1 lukas users  13K Jan  9 19:56 .
drwxr-xr-x 1 lukas users  120 Jan  9 19:57 ..
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 abab
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 acorn
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 acorn-globals
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 acorn-walk
drwxr-xr-x 1 lukas users  118 Jan  9 19:56 ajv
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 alphanum-sort
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 ansi-regex
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 ansi-styles
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 ansi-to-html
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 anymatch
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 argparse
drwxr-xr-x 1 lukas users  120 Jan  9 19:56 array-equal
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 array-unique
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 arr-diff
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 arr-flatten
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 arr-union
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 asn1
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 asn1.js
drwxr-xr-x 1 lukas users  176 Jan  9 19:56 assert
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 assert-plus
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 assign-symbols
drwxr-xr-x 1 lukas users   58 Jan  9 19:56 async-each
drwxr-xr-x 1 lukas users  184 Jan  9 19:56 asynckit
drwxr-xr-x 1 lukas users  132 Jan  9 19:56 async-limiter
drwxr-xr-x 1 lukas users  174 Jan  9 19:56 atob
drwxr-xr-x 1 lukas users  118 Jan  9 19:56 aws4
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 aws-sign2
drwxr-xr-x 1 lukas users 5.3K Jan  9 19:56 @babel
drwxr-xr-x 1 lukas users  184 Jan  9 19:56 babel-plugin-dynamic-import-node
drwxr-xr-x 1 lukas users  190 Jan  9 19:56 babel-runtime
drwxr-xr-x 1 lukas users  126 Jan  9 19:56 babel-types
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 babylon-walk
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 balanced-match
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 base
drwxr-xr-x 1 lukas users  122 Jan  9 19:56 base64-js
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 bcrypt-pbkdf
drwxr-xr-x 1 lukas users  484 Jan  9 19:56 .bin
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 binary-extensions
drwxr-xr-x 1 lukas users   84 Jan  9 19:56 bindings
drwxr-xr-x 1 lukas users   56 Jan  9 19:56 bn.js
drwxr-xr-x 1 lukas users   58 Jan  9 19:56 boolbase
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 brace-expansion
drwxr-xr-x 1 lukas users   78 Jan  9 19:56 braces
drwxr-xr-x 1 lukas users  158 Jan  9 19:56 brfs
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 brorand
drwxr-xr-x 1 lukas users  274 Jan  9 19:56 browserify-aes
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 browserify-cipher
drwxr-xr-x 1 lukas users  124 Jan  9 19:56 browserify-des
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 browserify-rsa
drwxr-xr-x 1 lukas users  126 Jan  9 19:56 browserify-sign
drwxr-xr-x 1 lukas users  154 Jan  9 19:56 browserify-zlib
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 browser-process-hrtime
drwxr-xr-x 1 lukas users  222 Jan  9 19:56 browserslist
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 buffer
drwxr-xr-x 1 lukas users  114 Jan  9 19:56 buffer-equal
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 buffer-from
drwxr-xr-x 1 lukas users  160 Jan  9 19:56 buffer-xor
drwxr-xr-x 1 lukas users  108 Jan  9 19:56 builtin-status-codes
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 cache-base
drwxr-xr-x 1 lukas users  198 Jan  9 19:56 call-bind
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 caller-callsite
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 caller-path
drwxr-xr-x 1 lukas users  140 Jan  9 19:56 call-me-maybe
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 callsites
drwxr-xr-x 1 lukas users  112 Jan  9 19:56 caniuse-api
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 caniuse-lite
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 caseless
drwxr-xr-x 1 lukas users  132 Jan  9 19:56 chalk
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 chokidar
drwxr-xr-x 1 lukas users  146 Jan  9 19:56 cipher-base
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 class-utils
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 cli-cursor
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 cli-spinners
drwxr-xr-x 1 lukas users  110 Jan  9 19:56 clone
drwxr-xr-x 1 lukas users  118 Jan  9 19:56 coa
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 collection-visit
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 color
drwxr-xr-x 1 lukas users  140 Jan  9 19:56 color-convert
drwxr-xr-x 1 lukas users  124 Jan  9 19:56 colorette
drwxr-xr-x 1 lukas users  134 Jan  9 19:56 color-name
drwxr-xr-x 1 lukas users  120 Jan  9 19:56 color-string
drwxr-xr-x 1 lukas users   80 Jan  9 19:56 combined-stream
drwxr-xr-x 1 lukas users  110 Jan  9 19:56 commander
drwxr-xr-x 1 lukas users  150 Jan  9 19:56 command-exists
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 component-emitter
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 concat-map
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 concat-stream
drwxr-xr-x 1 lukas users  150 Jan  9 19:56 console-browserify
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 constants-browserify
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 convert-source-map
drwxr-xr-x 1 lukas users   54 Jan  9 19:56 copy-descriptor
drwxr-xr-x 1 lukas users  278 Jan  9 19:56 core-js
drwxr-xr-x 1 lukas users  384 Jan  9 19:56 core-js-compat
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 core-util-is
drwxr-xr-x 1 lukas users  112 Jan  9 19:56 cosmiconfig
drwxr-xr-x 1 lukas users  114 Jan  9 19:56 create-ecdh
drwxr-xr-x 1 lukas users  164 Jan  9 19:56 create-hash
drwxr-xr-x 1 lukas users  134 Jan  9 19:56 create-hmac
drwxr-xr-x 1 lukas users  126 Jan  9 19:56 cross-spawn
drwxr-xr-x 1 lukas users  134 Jan  9 19:56 crypto-browserify
drwxr-xr-x 1 lukas users   82 Jan  9 19:56 css-color-names
drwxr-xr-x 1 lukas users  104 Jan  9 19:56 css-declaration-sorter
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 cssesc
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 css-modules-loader-core
drwxr-xr-x 1 lukas users  122 Jan  9 19:56 cssnano
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 cssnano-preset-default
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 cssnano-util-get-arguments
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 cssnano-util-get-match
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 cssnano-util-raw-cache
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 cssnano-util-same-parent
drwxr-xr-x 1 lukas users  118 Jan  9 19:56 csso
drwxr-xr-x 1 lukas users   76 Jan  9 19:56 cssom
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 css-select
drwxr-xr-x 1 lukas users  108 Jan  9 19:56 css-select-base-adapter
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 css-selector-tokenizer
drwxr-xr-x 1 lukas users  174 Jan  9 19:56 cssstyle
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 css-tree
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 css-what
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 dashdash
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 data-urls
drwxr-xr-x 1 lukas users  228 Jan  9 19:56 deasync
drwxr-xr-x 1 lukas users  258 Jan  9 19:56 debug
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 decode-uri-component
drwxr-xr-x 1 lukas users  148 Jan  9 19:56 deep-is
drwxr-xr-x 1 lukas users  130 Jan  9 19:56 defaults
drwxr-xr-x 1 lukas users  190 Jan  9 19:56 define-properties
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 define-property
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 delayed-stream
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 depd
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 des.js
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 destroy
drwxr-xr-x 1 lukas users  144 Jan  9 19:56 diffie-hellman
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 domain-browser
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 domelementtype
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 domexception
drwxr-xr-x 1 lukas users  108 Jan  9 19:56 domhandler
drwxr-xr-x 1 lukas users  150 Jan  9 19:56 dom-serializer
drwxr-xr-x 1 lukas users  108 Jan  9 19:56 domutils
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 dotenv
drwxr-xr-x 1 lukas users  116 Jan  9 19:56 dotenv-expand
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 dot-prop
drwxr-xr-x 1 lukas users   78 Jan  9 19:56 duplexer2
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 ecc-jsbn
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 ee-first
drwxr-xr-x 1 lukas users  240 Jan  9 19:56 electron-to-chromium
drwxr-xr-x 1 lukas users   48 Jan  9 19:56 elliptic
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 encodeurl
drwxr-xr-x 1 lukas users  116 Jan  9 19:56 entities
drwxr-xr-x 1 lukas users   64 Jan  9 19:56 envinfo
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 error-ex
drwxr-xr-x 1 lukas users  508 Jan  9 19:56 es-abstract
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 escalade
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 escape-html
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 escape-string-regexp
drwxr-xr-x 1 lukas users  118 Jan  9 19:56 escodegen
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 esprima
drwxr-xr-x 1 lukas users  230 Jan  9 19:56 es-to-primitive
drwxr-xr-x 1 lukas users  130 Jan  9 19:56 estraverse
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 esutils
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 etag
drwxr-xr-x 1 lukas users  184 Jan  9 19:56 events
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 evp_bytestokey
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 expand-brackets
drwxr-xr-x 1 lukas users  210 Jan  9 19:56 extend
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 extend-shallow
drwxr-xr-x 1 lukas users  126 Jan  9 19:56 extglob
drwxr-xr-x 1 lukas users  172 Jan  9 19:56 extsprintf
drwxr-xr-x 1 lukas users  166 Jan  9 19:56 falafel
drwxr-xr-x 1 lukas users  134 Jan  9 19:56 fast-deep-equal
drwxr-xr-x 1 lukas users  112 Jan  9 19:56 fast-glob
drwxr-xr-x 1 lukas users  194 Jan  9 19:56 fast-json-stable-stringify
drwxr-xr-x 1 lukas users   90 Jan  9 19:56 fast-levenshtein
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 fastparse
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 filesize
drwxr-xr-x 1 lukas users  162 Jan  9 19:56 file-uri-to-path
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 fill-range
drwxr-xr-x 1 lukas users  150 Jan  9 19:56 foreach
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 forever-agent
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 for-in
drwxr-xr-x 1 lukas users  106 Jan  9 19:56 form-data
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 fragment-cache
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 fresh
drwxr-xr-x 1 lukas users   84 Jan  9 19:56 fs.realpath
drwxr-xr-x 1 lukas users  220 Jan  9 19:56 function-bind
drwxr-xr-x 1 lukas users  106 Jan  9 19:56 gensync
drwxr-xr-x 1 lukas users  196 Jan  9 19:56 get-intrinsic
drwxr-xr-x 1 lukas users  104 Jan  9 19:56 getpass
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 get-port
drwxr-xr-x 1 lukas users   54 Jan  9 19:56 get-value
drwxr-xr-x 1 lukas users  126 Jan  9 19:56 glob
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 globals
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 glob-parent
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 glob-to-regexp
drwxr-xr-x 1 lukas users  158 Jan  9 19:56 graceful-fs
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 grapheme-breaker
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 har-schema
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 har-validator
drwxr-xr-x 1 lukas users   78 Jan  9 19:56 has
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 has-ansi
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 has-flag
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 hash-base
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 hash.js
drwxr-xr-x 1 lukas users  174 Jan  9 19:56 has-symbols
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 has-value
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 has-values
drwxr-xr-x 1 lukas users  214 Jan  9 19:56 hex-color-regex
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 hmac-drbg
drwxr-xr-x 1 lukas users  154 Jan  9 19:56 hsla-regex
drwxr-xr-x 1 lukas users  154 Jan  9 19:56 hsl-regex
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 html-comment-regex
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 html-encoding-sniffer
drwxr-xr-x 1 lukas users  174 Jan  9 19:56 htmlnano
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 htmlparser2
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 html-tags
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 http-errors
drwxr-xr-x 1 lukas users   84 Jan  9 19:56 https-browserify
drwxr-xr-x 1 lukas users  184 Jan  9 19:56 http-signature
drwxr-xr-x 1 lukas users    8 Jan  9 19:56 @iarna
drwxr-xr-x 1 lukas users  104 Jan  9 19:56 iconv-lite
drwxr-xr-x 1 lukas users   68 Jan  9 19:56 icss-replace-symbols
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 ieee754
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 import-fresh
drwxr-xr-x 1 lukas users  106 Jan  9 19:56 indexes-of
drwxr-xr-x 1 lukas users   78 Jan  9 19:56 inflight
drwxr-xr-x 1 lukas users  116 Jan  9 19:56 inherits
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 is-absolute-url
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 is-accessor-descriptor
drwxr-xr-x 1 lukas users  158 Jan  9 19:56 isarray
drwxr-xr-x 1 lukas users  166 Jan  9 19:56 is-arrayish
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-binary-path
drwxr-xr-x 1 lukas users   80 Jan  9 19:56 is-buffer
drwxr-xr-x 1 lukas users  210 Jan  9 19:56 is-callable
drwxr-xr-x 1 lukas users  174 Jan  9 19:56 is-color-stop
drwxr-xr-x 1 lukas users  192 Jan  9 19:56 is-core-module
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 is-data-descriptor
drwxr-xr-x 1 lukas users  178 Jan  9 19:56 is-date-object
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 is-descriptor
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-directory
drwxr-xr-x 1 lukas users  134 Jan  9 19:56 isexe
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-extendable
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-extglob
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-glob
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-html
drwxr-xr-x 1 lukas users  200 Jan  9 19:56 is-negative-zero
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-number
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 is-obj
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 isobject
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 is-plain-object
drwxr-xr-x 1 lukas users  184 Jan  9 19:56 is-regex
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-resolvable
drwxr-xr-x 1 lukas users  158 Jan  9 19:56 isstream
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-svg
drwxr-xr-x 1 lukas users  212 Jan  9 19:56 is-symbol
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 is-typedarray
drwxr-xr-x 1 lukas users  130 Jan  9 19:56 is-url
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-windows
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 is-wsl
drwxr-xr-x 1 lukas users  136 Jan  9 19:56 jsbn
drwxr-xr-x 1 lukas users  118 Jan  9 19:56 jsdom
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 jsesc
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 json5
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 json-parse-better-errors
drwxr-xr-x 1 lukas users  248 Jan  9 19:56 json-schema
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 json-schema-traverse
drwxr-xr-x 1 lukas users  148 Jan  9 19:56 json-stringify-safe
drwxr-xr-x 1 lukas users  112 Jan  9 19:56 jsprim
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 js-tokens
drwxr-xr-x 1 lukas users  140 Jan  9 19:56 js-yaml
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 kind-of
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 levn
drwxr-xr-x 1 lukas users  16K Jan  9 19:56 lodash
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 lodash.clone
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 lodash.memoize
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 lodash.sortby
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 lodash.uniq
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 log-symbols
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 magic-string
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 map-cache
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 map-visit
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 md5.js
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 mdn-data
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 merge2
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 merge-source-map
drwxr-xr-x 1 lukas users  126 Jan  9 19:56 micromatch
drwxr-xr-x 1 lukas users  104 Jan  9 19:56 miller-rabin
drwxr-xr-x 1 lukas users  152 Jan  9 19:56 mime
drwxr-xr-x 1 lukas users  106 Jan  9 19:56 mime-db
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 mime-types
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 mimic-fn
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 minimalistic-assert
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 minimalistic-crypto-utils
drwxr-xr-x 1 lukas users   80 Jan  9 19:56 minimatch
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 minimist
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 mixin-deep
drwxr-xr-x 1 lukas users   90 Jan  9 19:56 mkdirp
drwxr-xr-x 1 lukas users   32 Jan  9 19:56 @mrmlnc
drwxr-xr-x 1 lukas users   78 Jan  9 19:56 ms
drwxr-xr-x 1 lukas users  126 Jan  9 19:56 nanomatch
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 nice-try
drwxr-xr-x 1 lukas users  362 Jan  9 19:56 node-addon-api
drwxr-xr-x 1 lukas users  104 Jan  9 19:56 node-forge
drwxr-xr-x 1 lukas users   14 Jan  9 19:56 @nodelib
drwxr-xr-x 1 lukas users  104 Jan  9 19:56 node-libs-browser
drwxr-xr-x 1 lukas users   78 Jan  9 19:56 node-releases
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 normalize-path
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 normalize-url
drwxr-xr-x 1 lukas users  108 Jan  9 19:56 nth-check
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 nwsapi
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 oauth-sign
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 object-assign
drwxr-xr-x 1 lukas users  318 Jan  9 19:56 object.assign
drwxr-xr-x 1 lukas users   54 Jan  9 19:56 object-copy
drwxr-xr-x 1 lukas users  306 Jan  9 19:56 object.getownpropertydescriptors
drwxr-xr-x 1 lukas users  262 Jan  9 19:56 object-inspect
drwxr-xr-x 1 lukas users  232 Jan  9 19:56 object-keys
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 object.pick
drwxr-xr-x 1 lukas users  284 Jan  9 19:56 object.values
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 object-visit
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 once
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 onetime
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 on-finished
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 opn
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 optionator
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 ora
drwxr-xr-x 1 lukas users  110 Jan  9 19:56 os-browserify
drwxr-xr-x 1 lukas users  110 Jan  9 19:56 pako
drwxr-xr-x 1 lukas users   54 Jan  9 19:56 @parcel
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 parcel-bundler
drwxr-xr-x 1 lukas users   48 Jan  9 19:56 parse5
drwxr-xr-x 1 lukas users  154 Jan  9 19:56 parse-asn1
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 parse-json
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 parseurl
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 pascalcase
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 path-browserify
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 path-dirname
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 path-is-absolute
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 path-key
drwxr-xr-x 1 lukas users  108 Jan  9 19:56 path-parse
drwxr-xr-x 1 lukas users  122 Jan  9 19:56 pbkdf2
drwxr-xr-x 1 lukas users  154 Jan  9 19:56 performance-now
drwxr-xr-x 1 lukas users  106 Jan  9 19:56 physical-cpu-count
drwxr-xr-x 1 lukas users  754 Jan  9 19:56 pn
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 posix-character-classes
drwxr-xr-x 1 lukas users  118 Jan  9 19:56 postcss
drwxr-xr-x 1 lukas users  112 Jan  9 19:56 postcss-calc
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 postcss-colormin
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 postcss-convert-values
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-discard-comments
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 postcss-discard-duplicates
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 postcss-discard-empty
drwxr-xr-x 1 lukas users  138 Jan  9 19:56 postcss-discard-overridden
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-merge-longhand
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 postcss-merge-rules
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 postcss-minify-font-values
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-minify-gradients
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 postcss-minify-params
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-minify-selectors
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-modules-extract-imports
drwxr-xr-x 1 lukas users  120 Jan  9 19:56 postcss-modules-local-by-default
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-modules-scope
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 postcss-modules-values
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 postcss-normalize-charset
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-normalize-display-values
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-normalize-positions
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-normalize-repeat-style
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-normalize-string
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-normalize-timing-functions
drwxr-xr-x 1 lukas users  120 Jan  9 19:56 postcss-normalize-unicode
drwxr-xr-x 1 lukas users  120 Jan  9 19:56 postcss-normalize-url
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-normalize-whitespace
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-ordered-values
drwxr-xr-x 1 lukas users  104 Jan  9 19:56 postcss-reduce-initial
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 postcss-reduce-transforms
drwxr-xr-x 1 lukas users  164 Jan  9 19:56 postcss-selector-parser
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 postcss-svgo
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 postcss-unique-selectors
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 postcss-value-parser
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 posthtml
drwxr-xr-x 1 lukas users  166 Jan  9 19:56 posthtml-parser
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 posthtml-render
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 prelude-ls
drwxr-xr-x 1 lukas users  124 Jan  9 19:56 process
drwxr-xr-x 1 lukas users   78 Jan  9 19:56 process-nextick-args
drwxr-xr-x 1 lukas users  130 Jan  9 19:56 psl
drwxr-xr-x 1 lukas users  238 Jan  9 19:56 public-encrypt
drwxr-xr-x 1 lukas users  124 Jan  9 19:56 punycode
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 purgecss
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 q
drwxr-xr-x 1 lukas users  172 Jan  9 19:56 qs
drwxr-xr-x 1 lukas users  256 Jan  9 19:56 querystring
drwxr-xr-x 1 lukas users  164 Jan  9 19:56 querystring-es3
drwxr-xr-x 1 lukas users  134 Jan  9 19:56 quote-stream
drwxr-xr-x 1 lukas users  146 Jan  9 19:56 randombytes
drwxr-xr-x 1 lukas users  146 Jan  9 19:56 randomfill
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 range-parser
drwxr-xr-x 1 lukas users  394 Jan  9 19:56 readable-stream
drwxr-xr-x 1 lukas users  104 Jan  9 19:56 readdirp
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 regenerate
drwxr-xr-x 1 lukas users  232 Jan  9 19:56 regenerate-unicode-properties
drwxr-xr-x 1 lukas users   90 Jan  9 19:56 regenerator-runtime
drwxr-xr-x 1 lukas users   68 Jan  9 19:56 regenerator-transform
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 regex-not
drwxr-xr-x 1 lukas users  140 Jan  9 19:56 regexpu-core
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 regjsgen
drwxr-xr-x 1 lukas users  130 Jan  9 19:56 regjsparser
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 relateurl
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 remove-trailing-separator
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 repeat-element
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 repeat-string
drwxr-xr-x 1 lukas users  146 Jan  9 19:56 request
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 request-promise-core
drwxr-xr-x 1 lukas users   80 Jan  9 19:56 request-promise-native
drwxr-xr-x 1 lukas users  220 Jan  9 19:56 resolve
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 resolve-from
drwxr-xr-x 1 lukas users  182 Jan  9 19:56 resolve-url
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 restore-cursor
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 ret
drwxr-xr-x 1 lukas users  154 Jan  9 19:56 rgba-regex
drwxr-xr-x 1 lukas users  154 Jan  9 19:56 rgb-regex
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 rimraf
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 ripemd160
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 safe-buffer
drwxr-xr-x 1 lukas users  146 Jan  9 19:56 safer-buffer
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 safe-regex
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 sax
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 saxes
drwxr-xr-x 1 lukas users  122 Jan  9 19:56 semver
drwxr-xr-x 1 lukas users  116 Jan  9 19:56 send
drwxr-xr-x 1 lukas users   68 Jan  9 19:56 serialize-to-js
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 serve-static
drwxr-xr-x 1 lukas users   76 Jan  9 19:56 setimmediate
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 setprototypeof
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 set-value
drwxr-xr-x 1 lukas users  226 Jan  9 19:56 sha.js
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 shallow-copy
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 shebang-command
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 shebang-regex
drwxr-xr-x 1 lukas users  124 Jan  9 19:56 signal-exit
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 simple-swizzle
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 snapdragon
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 snapdragon-node
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 snapdragon-util
drwxr-xr-x 1 lukas users  150 Jan  9 19:56 source-map
drwxr-xr-x 1 lukas users  152 Jan  9 19:56 source-map-resolve
drwxr-xr-x 1 lukas users  184 Jan  9 19:56 source-map-support
drwxr-xr-x 1 lukas users  218 Jan  9 19:56 source-map-url
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 split-string
drwxr-xr-x 1 lukas users  150 Jan  9 19:56 sprintf-js
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 srcset
drwxr-xr-x 1 lukas users  116 Jan  9 19:56 sshpk
drwxr-xr-x 1 lukas users  106 Jan  9 19:56 stable
drwxr-xr-x 1 lukas users  198 Jan  9 19:56 static-eval
drwxr-xr-x 1 lukas users   54 Jan  9 19:56 static-extend
drwxr-xr-x 1 lukas users  152 Jan  9 19:56 static-module
drwxr-xr-x 1 lukas users  112 Jan  9 19:56 statuses
drwxr-xr-x 1 lukas users   82 Jan  9 19:56 stealthy-require
drwxr-xr-x 1 lukas users  114 Jan  9 19:56 stream-browserify
drwxr-xr-x 1 lukas users  160 Jan  9 19:56 stream-http
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 string_decoder
drwxr-xr-x 1 lukas users  284 Jan  9 19:56 string.prototype.trimend
drwxr-xr-x 1 lukas users  284 Jan  9 19:56 string.prototype.trimstart
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 strip-ansi
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 stylehacks
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 supports-color
drwxr-xr-x 1 lukas users  188 Jan  9 19:56 svgo
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 symbol-tree
drwxr-xr-x 1 lukas users  124 Jan  9 19:56 terser
drwxr-xr-x 1 lukas users   84 Jan  9 19:56 through2
drwxr-xr-x 1 lukas users  100 Jan  9 19:56 timers-browserify
drwxr-xr-x 1 lukas users  114 Jan  9 19:56 timsort
drwxr-xr-x 1 lukas users   80 Jan  9 19:56 tiny-inflate
drwxr-xr-x 1 lukas users  146 Jan  9 19:56 to-arraybuffer
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 to-fast-properties
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 toidentifier
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 to-object-path
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 to-regex
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 to-regex-range
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 tough-cookie
drwxr-xr-x 1 lukas users   84 Jan  9 19:56 tr46
drwxr-xr-x 1 lukas users   84 Jan  9 19:56 tty-browserify
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 tunnel-agent
drwxr-xr-x 1 lukas users  278 Jan  9 19:56 tweetnacl
drwxr-xr-x 1 lukas users   62 Jan  9 19:56 type-check
drwxr-xr-x 1 lukas users  128 Jan  9 19:56 typedarray
drwxr-xr-x 1 lukas users    2 Jan  9 19:56 @types
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 uncss
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 unicode-canonical-property-names-ecmascript
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 unicode-match-property-ecmascript
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 unicode-match-property-value-ecmascript
drwxr-xr-x 1 lukas users   88 Jan  9 19:56 unicode-property-aliases-ecmascript
drwxr-xr-x 1 lukas users  220 Jan  9 19:56 unicode-trie
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 union-value
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 uniq
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 uniqs
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 unquote
drwxr-xr-x 1 lukas users   96 Jan  9 19:56 unset-value
drwxr-xr-x 1 lukas users   86 Jan  9 19:56 upath
drwxr-xr-x 1 lukas users   82 Jan  9 19:56 uri-js
drwxr-xr-x 1 lukas users   98 Jan  9 19:56 urix
drwxr-xr-x 1 lukas users  180 Jan  9 19:56 url
drwxr-xr-x 1 lukas users   72 Jan  9 19:56 use
drwxr-xr-x 1 lukas users  132 Jan  9 19:56 util
drwxr-xr-x 1 lukas users  110 Jan  9 19:56 util-deprecate
drwxr-xr-x 1 lukas users  258 Jan  9 19:56 util.promisify
drwxr-xr-x 1 lukas users  168 Jan  9 19:56 uuid
drwxr-xr-x 1 lukas users  118 Jan  9 19:56 v8-compile-cache
drwxr-xr-x 1 lukas users   76 Jan  9 19:56 vendors
drwxr-xr-x 1 lukas users  156 Jan  9 19:56 verror
drwxr-xr-x 1 lukas users   94 Jan  9 19:56 vlq
drwxr-xr-x 1 lukas users  188 Jan  9 19:56 vm-browserify
drwxr-xr-x 1 lukas users  108 Jan  9 19:56 w3c-hr-time
drwxr-xr-x 1 lukas users   48 Jan  9 19:56 w3c-xmlserializer
drwxr-xr-x 1 lukas users  132 Jan  9 19:56 wcwidth
drwxr-xr-x 1 lukas users   68 Jan  9 19:56 webidl-conversions
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 whatwg-encoding
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 whatwg-mimetype
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 whatwg-url
drwxr-xr-x 1 lukas users  102 Jan  9 19:56 which
drwxr-xr-x 1 lukas users   92 Jan  9 19:56 word-wrap
drwxr-xr-x 1 lukas users   74 Jan  9 19:56 wrappy
drwxr-xr-x 1 lukas users   78 Jan  9 19:56 ws
drwxr-xr-x 1 lukas users  150 Jan  9 19:56 xmlchars
drwxr-xr-x 1 lukas users   70 Jan  9 19:56 xml-name-validator
drwxr-xr-x 1 lukas users  132 Jan  9 19:56 xtend
-rw-r--r-- 1 lukas users 124K Jan  9 19:56 .yarn-integrity

Note that yarn doesn't even use symlinks. I was told that they used to do that, but even symlinking everything into one directory breaks some packages.

@Profpatsch
Copy link
Owner

Okay, hm, seems like we might want two flags, then, or just bite the bullet and always copy the complete transitive closure, which makes the whole thing slow.

On btrfs the cp is fast (that is copy-on-write) if you use reflink=always, but will fail on other file systems.

Do you know if yarn links the combined transitive closure of dev and runtime dependencies?

Hmm, okay, so I’d propose having two flags

{ linkTransitiveClosure ? true
, linkingMode ? "symlink" }

since the symlinking the transitive closure at every stage shouldn’t be too much overhead, whereas actually copying it leads to considerable duplication and makes the build slower than necessary.
Which means those few completely braindead packages fail until you flip linkingMode to "copy" (which we should implement with reflink=auto), but that’s a good trade-off I would say.

@sternenseemann
Copy link
Collaborator Author

Do you know if yarn links the combined transitive closure of dev and runtime dependencies?

I think so:

Development dependencies are very much like regular dependencies except that they only matter for local packages. Packages fetched from remote registries such as npm will not be able to access their development dependencies, but packages installed from local sources (such as workspaces or the portal: protocol) will. — Source

Hmm, okay, so I’d propose having two flags

Yeah that was roughly my idea, too. reflink=auto seems like a good idea, too.

@sternenseemann
Copy link
Collaborator Author

It seems to me that this function implements the building of node_modules. I haven't yet looked into it too much, though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants