npm如何处理锁文件
How does npm handle lock files
所以我 运行ning npm install xyz
在一个脚本中,该脚本由另一个 npm 模块的安装后 npm 挂钩调用。 (我们不要讨论为什么,但它与 npm 不支持的可选依赖项有关)
npm install moduleA
-> installing moduleA
-> running postinstall hook (my script)
-> my script runs npm install xyz
当我 运行 脚本本身时,npm 安装 运行 相当快,但是当我在安装后挂钩中安装模块时,脚本等待锁定文件至少 1 分钟。 (或者我假设)
当我在 npm 中启用详细日志级别时,我得到如下输出:
[a lot more lines above]
npm verb addNamed "latest" is being treated as a dist-tag for invert-kv
npm info addNameTag [ 'invert-kv', 'latest' ]
npm verb addNameTag registry:https://registry.npmjs.org/invert-kv already in flight; waiting
npm verb addNamed "1.0.0" is a plain semver version for invert-kv
npm verb afterAdd /Users/path/.npm/invert-kv/1.0.0/package/package.json not in flight; writing
npm verb correctMkdir /Users/path/.npm correctMkdir not in flight; initializing
npm verb afterAdd /Users/path/.npm/invert-kv/1.0.0/package/package.json written
npm verb cache add spec camelcase@^3.0.0
npm verb addNamed ">=3.0.0 <4.0.0" is a valid semver range for camelcase
npm verb addNameRange registry:https://registry.npmjs.org/camelcase not in flight; fetching
npm verb get https://registry.npmjs.org/camelcase not expired, no request
npm verb addNamed "3.0.0" is a plain semver version for camelcase
npm verb afterAdd /Users/path/.npm/camelcase/3.0.0/package/package.json not in flight; writing
npm verb correctMkdir /Users/path/.npm correctMkdir not in flight; initializing
npm verb afterAdd /Users/path/.npm/camelcase/3.0.0/package/package.json written
npm verb correctMkdir /Users/path/.npm/_locks correctMkdir not in flight; initializing
在这里等待至少一分钟
npm verb lock using /Users/path/.npm/_locks/staging-d21af557b41d4821.lock for /Users/path/Desktop/t/node_modules/.staging
npm verb unbuild node_modules/.staging/abbrev-ac014442
npm verb unbuild node_modules/.staging/ansi-regex-12e09986
npm verb unbuild node_modules/.staging/ansi-styles-1359ba2f
npm verb unbuild node_modules/.staging/aproba-d9971840
npm verb unbuild node_modules/.staging/array-find-index-c1ddfc4c
[a lot more lines below]
现在看correctMkdir的代码好像是把/Users/path/.npm/_locks
里面的所有文件都加载到内存里试试修复权限?不确定。
correctMkdir
被 lock 调用。这似乎对文件进行了散列和一些加密?也不确定。
在对一些 npm 代码进行逆向工程后,我通过将 cache-lock-stale
、cache-lock-wait
的配置更改为 10ms 取得了进展。不幸的是,在正确安装所有内容之前它仍然挂起太久。我怀疑在之前更改并且 npm 正在运行时没有考虑更改的配置?可能是?也许这是完全不同的东西? :)
谁能告诉我正确的方向?我可以做些什么来加快速度吗?
经过一夜的睡眠,现在安装速度似乎快多了。我猜某些缓存仍然挂在我的 _locks 文件夹中。
所以答案是:
暂时将 cache-lock-stale
和 cache-lock-wait
设置为 10ms
,npm 不会等待您的锁定文件过期。据我了解,npm 正在尝试等待 _lock 文件夹中的所有锁定文件完成,因为我们在 npm install 中 运行 npm install,父进程的锁定文件显然仍在使用中。这更像是一个猜测,但我希望它能帮助将来的人。
所以我 运行ning npm install xyz
在一个脚本中,该脚本由另一个 npm 模块的安装后 npm 挂钩调用。 (我们不要讨论为什么,但它与 npm 不支持的可选依赖项有关)
npm install moduleA
-> installing moduleA
-> running postinstall hook (my script)
-> my script runs npm install xyz
当我 运行 脚本本身时,npm 安装 运行 相当快,但是当我在安装后挂钩中安装模块时,脚本等待锁定文件至少 1 分钟。 (或者我假设)
当我在 npm 中启用详细日志级别时,我得到如下输出:
[a lot more lines above]
npm verb addNamed "latest" is being treated as a dist-tag for invert-kv
npm info addNameTag [ 'invert-kv', 'latest' ]
npm verb addNameTag registry:https://registry.npmjs.org/invert-kv already in flight; waiting
npm verb addNamed "1.0.0" is a plain semver version for invert-kv
npm verb afterAdd /Users/path/.npm/invert-kv/1.0.0/package/package.json not in flight; writing
npm verb correctMkdir /Users/path/.npm correctMkdir not in flight; initializing
npm verb afterAdd /Users/path/.npm/invert-kv/1.0.0/package/package.json written
npm verb cache add spec camelcase@^3.0.0
npm verb addNamed ">=3.0.0 <4.0.0" is a valid semver range for camelcase
npm verb addNameRange registry:https://registry.npmjs.org/camelcase not in flight; fetching
npm verb get https://registry.npmjs.org/camelcase not expired, no request
npm verb addNamed "3.0.0" is a plain semver version for camelcase
npm verb afterAdd /Users/path/.npm/camelcase/3.0.0/package/package.json not in flight; writing
npm verb correctMkdir /Users/path/.npm correctMkdir not in flight; initializing
npm verb afterAdd /Users/path/.npm/camelcase/3.0.0/package/package.json written
npm verb correctMkdir /Users/path/.npm/_locks correctMkdir not in flight; initializing
在这里等待至少一分钟
npm verb lock using /Users/path/.npm/_locks/staging-d21af557b41d4821.lock for /Users/path/Desktop/t/node_modules/.staging
npm verb unbuild node_modules/.staging/abbrev-ac014442
npm verb unbuild node_modules/.staging/ansi-regex-12e09986
npm verb unbuild node_modules/.staging/ansi-styles-1359ba2f
npm verb unbuild node_modules/.staging/aproba-d9971840
npm verb unbuild node_modules/.staging/array-find-index-c1ddfc4c
[a lot more lines below]
现在看correctMkdir的代码好像是把/Users/path/.npm/_locks
里面的所有文件都加载到内存里试试修复权限?不确定。
correctMkdir
被 lock 调用。这似乎对文件进行了散列和一些加密?也不确定。
在对一些 npm 代码进行逆向工程后,我通过将 cache-lock-stale
、cache-lock-wait
的配置更改为 10ms 取得了进展。不幸的是,在正确安装所有内容之前它仍然挂起太久。我怀疑在之前更改并且 npm 正在运行时没有考虑更改的配置?可能是?也许这是完全不同的东西? :)
谁能告诉我正确的方向?我可以做些什么来加快速度吗?
经过一夜的睡眠,现在安装速度似乎快多了。我猜某些缓存仍然挂在我的 _locks 文件夹中。
所以答案是:
暂时将 cache-lock-stale
和 cache-lock-wait
设置为 10ms
,npm 不会等待您的锁定文件过期。据我了解,npm 正在尝试等待 _lock 文件夹中的所有锁定文件完成,因为我们在 npm install 中 运行 npm install,父进程的锁定文件显然仍在使用中。这更像是一个猜测,但我希望它能帮助将来的人。