随着npm @ 5的发布,package-lock.json
除非npm-shrinkwrap.json
已经存在,否则它现在将写入.
我在全球范围内安装了npm @ 5:
npm install npm@5 -g
Run Code Online (Sandbox Code Playgroud)
现在,如果npm-shrinkwrap.json
在以下期间找到a :
npm install
Run Code Online (Sandbox Code Playgroud)
将打印一条警告:
npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!
Run Code Online (Sandbox Code Playgroud)
所以我的外卖是我应该用the替换收缩膜package-lock.json
.
然而,为什么会有新的格式呢?那可以package-lock.json
做什么npm-shrinkwrap.json
不可以?
刚刚从3点到5点更新,以使用此功能.
对不起,我一定错过了一些非常明显的东西,但是如何在安装时让npm尊重package-lock.json文件中的固定版本?
假设我有package.json
一些过时的套餐.做一个npm install
会吸引新的东西,打破我的应用程序.
例如,我想要稳定的主要包是bootstrap
- 我想暂时在bootstrap@4.0.0-alpha.6上阻止它的版本,但是npm install
找到4.0.0-beta.28.
如果我有npm update
任何包,package-lock.json会更新.
这是我的boot.rap的package.json条目:
"bootstrap": "^4.0.0-alpha.6"
这就是我对已安装的软件包和元数据的看法:
$ npm list 2>/dev/null | grep bootstrap
??? bootstrap@4.0.0-alpha.6
??? bootstrap-vue@0.16.1
? ??? bootstrap@4.0.0-alpha.6 deduped
(env) jluc@py$ grep bootstrap package.json package-lock.json
package.json: "bootstrap": "^4.0.0-alpha.6",
package.json: "bootstrap-vue": "^0.16.1",
package-lock.json: "bootstrap": {
package-lock.json: "version": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-alpha.6.tgz",
package-lock.json: "bootstrap-vue": {
package-lock.json: "version": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-0.16.1.tgz",
package-lock.json: "bootstrap": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-alpha.6.tgz",
Run Code Online (Sandbox Code Playgroud)
看起来不错.Lock是bootstrap-4.0.0-alpha.6.
将npm package-lock.json
置于版本控制之下有什么意义?根据我的经验,这个文件源控制引起了比效率提升更多的麻烦和混乱.
拥有package-lock.json
源代码控制下使一个大难题每个人谁添加/删除一个开发者/修改的任何节点模块时需要解决冲突的分支之间.特别是在复杂/大型应用程序上工作,其中package-lock.json可以长达数万行.即使只是吹掉node_modules并运行一个新的,npm install
也会在package-lock中产生剧烈的变化.
关于包锁还有其他几个SO问题:
和一个关于包锁的大量对话的GitHub问题:
这让我觉得仍有广泛的不确定因素需要消除.
根据文件
package-lock.json
为npm修改node_modules树或package.json的任何操作自动生成.
那你为什么要把一个自动生成的文件放在源代码管理下呢?
上面的GitHub问题详细说明了一些人为了应对与package-lock.json的混淆,如何将npm install
脚本更改为rm -f package-lock.json && npm install
,这也感觉不正确.
似乎package-lock.json
正在努力成为节点模块依赖关系的确切版本的真实来源,但这不正是package.json的功能吗?什么时候解决这个文件中的合并冲突的难以忍受的痛苦开始得到回报?
例如,我已经使用git切换分支,并希望将node_modules与当前的package.json同步.我怎么做?
如果您将 Github 项目连接到 Cloudflare Pages 或 Vercel 等产品,则提交到远程存储库会触发新构建。这些构建将运行适当的安装和构建命令。
我已经几个月没有更新网站了。但是所使用的依赖项发生了重大变化,这让我非常头痛地尝试逐一检查并解决出现的每个问题。
我正在使用pnpm
,我是否可以pnpm install
查看现有的项目pnpm-lock.yaml
,以便最终构建一个与 6 个月前的构建完全相同的项目?
我只想编辑网站上的一些文本,而不必进行所有这些更新。package.json
我尝试通过删除实例来“冻结”所有依赖项和开发依赖项的版本^
,以匹配我在锁定文件中看到的内容,但这不起作用。
正如标题所示,但是:
如何最好地解决这个问题?如果我无论如何都从 package.json 安装,那么删除 package-lock.json 是一个好习惯吗?我应该保持更新吗?如果我想改用锁该怎么办?
我以前从未做过这样的事情,所以我什至不确定如果我只是重写 json 中的版本字符串,它会起作用还是会破坏 npm 安装。
有没有一种安全/专业的方法来更改 package-lock.json,并通过 npm 保持更新?
我有一个项目,我从文件中删除了一些不再需要的库package.json
,remove node_modules
,run npm install
,一切都继续按预期工作。
不幸的是,如果我在删除后package-lock.json
按照上述相同的步骤操作,我的构建会突然中断。生成了一个新的package-lock.json
,但我现在收到了来自某些依赖项的数百个弃用警告,即使项目继续构建这些相同的依赖项也会在意外的地方中断。
如果我恢复到之前的package-lock.json
状态并再次运行相同的步骤(remove node_modules
、run npm install
),警告将再次消失,并且构建再次处于安全状态。
我的理解是,package-lock.json
每次我们运行npm install
最新的软件包版本时,都会更新,并遵守插入符^
和波浪号~
限制。如果我们有现有package-lock.json
安装和全新安装,此更新是否有所不同?
即使子依赖项之间存在某种冲突,我仍然很困惑为什么更新 a package-lock.json
withnpm install
效果很好,但npm install
在删除该文件后运行会创建一个新的package-lock.json
中断文件。经过多次尝试,这种情况始终发生。
Given a project where the package-lock.json
is managed in source control with the goal that all developers on the team get exactly the same dependencies.
From the documentation of npm I think developers should use npm ci
to set up their development environment and probably also later when dependencies are updated.
However the instructions I see in typical npm projects is still to use npm install
.
Is there a reason developers should use npm install
instead of npm ci …
网上有很多人用不同的方式问同样的问题,但没有明确的答案。任何人都可以理解到足以解释为什么docker build
当package-lock.json
应用程序中存在文件时会失败,而当文件不存在时会成功运行吗?貌似跟npm有关,但是不清楚。
每个人都说删除package-lock.json
,但它存在是有原因的。
注意: npm install
在我的本地机器上工作正常,只是在 docker 容器中失败。
如果我有这个 Dockerfile:
# First Stage: Builder
FROM node:13.12.0-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
Run Code Online (Sandbox Code Playgroud)
并运行这个:
docker build -t container-tag ./
Run Code Online (Sandbox Code Playgroud)
我明白了:
npm WARN tar ENOENT: no such file or directory, open '/app/node_modules/.staging/eventsource-c2615740/example/index.html'
npm WARN tar ENOENT: no such file or directory, open '/app/node_modules/.staging/eventsource-c2615740/example/sse-client.js'
npm WARN tar ENOENT: no such file or directory, open …
Run Code Online (Sandbox Code Playgroud) 我当时正在做一个反应项目。
我把它克隆到了一台新机器上。
一旦我运行命令npm install
,package-lock.json
文件就被完全重写。
保存 package.json 依赖项时的最佳做法是什么?
例如,我看到很多依赖项不是固定的,例如:
"tslint": "~5.11.0"
Run Code Online (Sandbox Code Playgroud)
我希望有固定的依赖项,以便将来新开发人员加入团队时不会改变。
我对 package-lock.json 和 shrinkwrap 知之甚少,但我不确定这方面的“最佳实践”。在这种情况下是一个 Angular 应用程序,但它可以是一切。例如,将 package-lock.json 放在 repo 上会导致过去出现一些问题(我知道!推送它是最佳实践!)
有什么想法吗?
我无法执行expo start
命令。
错误信息:
PS C:\Users\Jacky Goyal\OneDrive\Desktop\rn1\my-project> expo start
Starting project at C:\Users\Jacky Goyal\OneDrive\Desktop\rn1\my-project
Unable to find expo in this project - have you run yarn / npm install yet?
?? action (C:\Users\Jacky Goyal\AppData\Roaming\npm\node_modules\expo-cli\src\commands\start.ts:34:11)
?? C:\Users\Jacky Goyal\AppData\Roaming\npm\node_modules\expo-cli\src\commands\start.ts:135:22
?? expo start (C:\Users\Jacky Goyal\AppData\Roaming\npm\node_modules\expo-cli\src\exp.ts:350:7)
PS C:\Users\Jacky Goyal\OneDrive\Desktop\rn1\my-project> npm install
added 28 packages, removed 46 packages, changed 34 packages, and audited 653 packages in 8s
17 packages are looking for funding
run `npm fund` for details
7 low severity vulnerabilities
Some issues …
Run Code Online (Sandbox Code Playgroud) npm ×13
node.js ×6
package.json ×4
build ×1
dependencies ×1
docker ×1
expo ×1
javascript ×1
npm-ci ×1
npm-update ×1
pnpm ×1