我正在使用 npm 作为构建生产 docker 映像的一部分。我想确保 package-lock.json 不会改变和匹配。
在 package.json 中更改补丁版本(手动编辑的文件)。注意到锁定文件有旧版本,所以我npm install
更新了它。当我这样做时,lockfileVersion
字段从2
变为1
。这看起来很奇怪。有关的文档lockfileVersion
:
一个整数版本,从 1 开始,该文档的版本号在生成此 package-lock.json 时使用了其语义。
好吧,那没有帮助。那么版本值的变化是否值得关注?如此减少似乎是一个奇怪的变化。当我升级版本时,我不应该更新锁定文件吗?
节点 v12.16.1、NPM 6.14.10
有时,在安装(不相关的)依赖项时,我会丢失resolved
每个私有 Nexus 存储库依赖项的值,这意味着当我的构建服务器运行时,npm ci
它会回退到尝试从 npm 存储库安装这些依赖项,这显然会失败。
我在用npm 8.5.5
/node 16.15
我正在使用 NPM 的工作区功能来构建 monorepo,这意味着我有几个项目package.json
文件以及一个根目录package.json
我的.npmrc
(在根级别)看起来像这样:
engine-strict=true
@foo:registry=http://prod-nexus.foo.com/repository/bar/
always-auth=true
Run Code Online (Sandbox Code Playgroud)
在(不相关的、随机的)安装之后,我package-lock.json
将进行以下更改:
"@foo": {
"version": "1.2.3",
- "resolved": "http://prod-nexus.foo.com/repository/bar/@foo/-/lib-1.2.3.tgz,
- "integrity": "sha...",
+ "license": "MIT",
"dependencies": { ....
Run Code Online (Sandbox Code Playgroud)
请注意,resolved
和integrity
字段已消失,并且license
已添加。
我已经多次遇到这个问题,每次我都通过回滚和一些手动编辑来解决它,最终它消失了,但我真的需要了解发生了什么。
造成这种情况的原因是什么,为什么它是随机的,我可以采取什么措施来防御它?
每当我生成程序包锁定文件时,也会出现“ resolved”块,如下所示:
"resolved": "http://devel.npm.registry:4873/lodash/-/lodash-4.17.5.tgz"
Run Code Online (Sandbox Code Playgroud)
这个网址的意义是什么?以后,如果我尝试基于此程序包锁安装依赖项,是否需要使用相同的npm注册表?因为我们将不同的npm注册表用于本地开发和生产构建。因此,当我进行开发时,我使用devel.npm.registry
,但是使用CI工具production.npm.registry
。根据我的测试,URL无关紧要(我尝试过npm@6.4.1
)。但是当前的实现方式很快就会改变,还是有意忽略了URL?我觉得npm的某些先前版本实际上检查了解析的URL。
在这种情况下,文档没有太大帮助。
我想做一个 diff,但没有 package-lock.json,它很大,并且是一个生成的文件,所以对我来说没有什么有趣的。我都尝试过:
git diff -- ':(exclude)package-lock.json'
git diff -- ':!package-lock.json'
Run Code Online (Sandbox Code Playgroud)
但它的输出为零。我究竟做错了什么 ?我正在运行 git 2.21.0
使用相同的git存储库,如果我删除node_modules
并且package-lock.json
,我的期望是每次运行npm install
应生成相同的package-lock.json
文件(提供或采取可能由发布者在过渡期间更新的一些模块.
我发现的是,根据我是在OSX机器上还是在Linux机器上执行此操作,我会得到截然不同的文件.
这是预期的吗?如果是这样,提交package-lock.json
文件的值是什么值,因为它在其中一个系统上无效.如果没有,可能会发生什么?
我正在使用 Vue 3,并且 19 小时前我将项目的一个运行良好的版本推送到了 GitHub。
大约5个小时后,当我输入时出现以下问题npm run serve
,导致出现以下几行信息:
> zagnetic@0.1.0 serve
> vue-cli-service serve
INFO Starting development server...
然后出现以下错误:
ValidationError: Progress Plugin Invalid Options
options should NOT have additional properties
options should NOT have additional properties
options should NOT have additional properties
options should pass "instanceof" keyword validation
options should match exactly one schema in oneOf
at validateOptions (/Users/mgav/zagnetic_vue/zagnetic/node_modules/webpack/node_modules/schema-utils/src/validateOptions.js:32:11)
at new ProgressPlugin (/Users/mgav/zagnetic_vue/zagnetic/node_modules/webpack/lib/ProgressPlugin.js:62:3)
at new Progress (/Users/mgav/zagnetic_vue/zagnetic/node_modules/progress-webpack-plugin/index.js:25:21)
at new progressPlugin (/Users/mgav/zagnetic_vue/zagnetic/node_modules/progress-webpack-plugin/index.js:127:10)
at /Users/mgav/zagnetic_vue/zagnetic/node_modules/webpack-chain/src/Plugin.js:14:18
at Object.toConfig (/Users/mgav/zagnetic_vue/zagnetic/node_modules/webpack-chain/src/Plugin.js:78:22)
at …
Run Code Online (Sandbox Code Playgroud) 当我提取团队的代码并运行npm install
其中的许多项目时package-lock.json
,它们的resolved
属性从 URL 更改为false
. 例如
"debug": {\n "version": "3.2.6",\n "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",\n \xe2\x80\xa6\n},\n\n// changes to \n\n"debug": {\n "version": "3.2.6",\n "resolved": false,\n \xe2\x80\xa6\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n我希望这种事不要发生。我不明白为什么会发生这种情况,也不明白是什么原因造成的。这似乎是一个非常奇怪和严重的错误。如果我签入并部署它会发生什么?\xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f
\n\nnpm -v #=> 6.14.5
node -v #=> v12.13.0
我以前从未发生过这种情况,但现在,当我npm install
在应用程序的根目录中时,我package-lock.json
会更新所有带有node_modules/
. 是什么原因造成的?
这是我在跑步前得到的npm i
这是我运行后得到的结果npm i
我可以运行哪些命令来手动生成(或确认)文件integrity
中包含的字段package-lock.json
?
以下是 SHA1 的示例:
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
Run Code Online (Sandbox Code Playgroud)
另一个使用 SHA512:
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
Run Code Online (Sandbox Code Playgroud)
我的疯狂猜测是针对 tgz 文件运行指定的哈希,然后对其进行 Base64 编码,但事实并非如此。例如:
$ sha1sum.exe uglify-js-2.8.29.tgz
29c5733148057bb4e1f75df35b7a9cb72e6a59dd *uglify-js-2.8.29.tgz
$ sha1sum.exe uglify-js-2.8.29.tgz | cut -d " " -f1
29c5733148057bb4e1f75df35b7a9cb72e6a59dd
$ sha1sum.exe uglify-js-2.8.29.tgz | cut -d " " -f1 | base64
MjljNTczMzE0ODA1N2JiNGUxZjc1ZGYzNWI3YTljYjcyZTZhNTlkZAo=
Run Code Online (Sandbox Code Playgroud)
这显然不等于:
KcVzMUgFe7Th913zW3qcty5qWd0=
Run Code Online (Sandbox Code Playgroud) npm ×8
node.js ×4
npm-install ×3
package.json ×2
git ×1
prefix ×1
vue.js ×1
vuejs3 ×1
yarnpkg ×1