我刚刚升级到npm @ 5.我现在有一个package-lock.json文件,其中包含package.json中的所有内容.我希望,当我运行时npm install
,将从锁定文件中提取依赖版本以确定应该在我的node_modules目录中安装什么.奇怪的是它实际上最终修改并重写了我的package-lock.json文件.
例如,锁定文件的typescript指定为版本2.1.6.然后,在npm install
命令之后,版本更改为2.4.1.这似乎打败了锁定文件的整个目的.
我错过了什么?如何让npm真正尊重我的锁文件?
我已经travis-ci
与我的GitHub帐户集成(https://github.com/pradeep0601/Angular5-Router-App).
当我将@angular/cli
版本从1.7.4 更新到6.0.0-rc.3时,构建开始失败并出现错误:
Local workspace file ('angular.json') could not be found.
Error: Local workspace file ('angular.json') could not be found.
at WorkspaceLoader._getProjectWorkspaceFilePath (/home/travis/build/pradeep0601/Angular5-Router-App/node_modules/@angular/cli/models/workspace-loader.js:37:19)
at WorkspaceLoader.loadWorkspace (/home/travis/build/pradeep0601/Angular5-Router-App/node_modules/@angular/cli/models/workspace-loader.js:24:21)
at TestCommand._loadWorkspaceAndArchitect (/home/travis/build/pradeep0601/Angular5-Router-App/node_modules/@angular/cli/models/architect-command.js:177:32)
at TestCommand.<anonymous> (/home/travis/build/pradeep0601/Angular5-Router-App/node_modules/@angular/cli/models/architect-command.js:45:25)
at Generator.next (<anonymous>)
at /home/travis/build/pradeep0601/Angular5-Router-App/node_modules/@angular/cli/models/architect-command.js:7:71
at new Promise (<anonymous>)
at __awaiter (/home/travis/build/pradeep0601/Angular5-Router-App/node_modules/@angular/cli/models/architect-command.js:3:12)
at TestCommand.initialize (/home/travis/build/pradeep0601/Angular5-Router-App/node_modules/@angular/cli/models/architect-command.js:44:16)
at /home/travis/build/pradeep0601/Angular5-Router-App/node_modules/@angular/cli/models/command-runner.js:100:23
Run Code Online (Sandbox Code Playgroud)
package.json片段以更好地了解运行环境:
"@angular/cli": "6.0.0-rc.3",
"@angular/compiler-cli": "^5.2.0",
"@angular/language-service": "^5.2.0",
"@types/jasmine": "~2.8.3",
"@types/jasminewd2": "~2.0.2",
Run Code Online (Sandbox Code Playgroud) 随着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
不可以?
将我的NPM更新到最新版本(从3.X到5.2.0)并npm install
在现有项目上运行后,我得到一个自动创建的package-lock.json
文件.
我可以告诉package-lock.json
我一个确切的依赖树而不是package.json
.
仅从这些信息来看,它似乎package.json
是多余的,不再需要了.
NPM是否有必要运作?
是否安全或仅使用package-lock.json
文件?
package-lock.json(doc1,doc2)上的文档没有提及任何相关内容.
编辑:
经过一番思考之后,我得出的结论是,如果有人想使用旧版本的NPM(5.x之前版本),它仍会安装所有依赖项,但版本不准确(补丁版本)
我意外删除了它,并且package.json
从那以后做了很多改动.是npm install
或npm update
不再生成package-lock.json
.我尝试清除我的npm缓存和我的nvm缓存,但似乎没有任何工作.我尝试了几个版本的节点(6.10.3节点 - 3.10.10 npm是我希望它的工作),它不适用于任何版本.
有没有人有办法强制npm生成package-lock.json
文件?
如果两个不同的开发人员正在使用不同版本在最初创建的项目节点(12/15)NPM(6/7)的使用package-lock.json
"lockfileVersion": 1
,开发者在使用NPM 7X安装新的软件包似乎package-lock.json
是重新创建的使用"lockfileVersion": 2
.
这似乎会给使用 npm v6 的开发人员带来问题,因为它尝试使用lockfileVersion 2
,但最终会产生新的差异。
npm WARN read-shrinkwrap 这个版本的 npm 兼容 lockfileVersion@1,但是 package-lock.json 是为 lockfileVersion@2 生成的。我会努力做到最好!
有什么方法可以指定较新版本的npm
to only use "lockfileVersion": 1
?还是我们只需要让所有开发人员都使用同一版本npm
?
Github在我的一个存储库上给了我这个错误.
We found a potential security vulnerability in one of your dependencies.
A dependency defined in ./package-lock.json has known security vulnerabilities
and should be updated.
Run Code Online (Sandbox Code Playgroud)
我们的package.json
文件中没有定义依赖项.根据我的理解,删除package-lock.json
文件并重新生成它并不是一个好习惯.但是,我看不到任何其他方法来解决此问题.如果我解除此安全漏洞,它将在几天后再次出现.有任何想法吗?谢谢!
Github告诉我,package-lock.json文件中的依赖项容易受到攻击并且已过时.问题是,如果我这样做,npm install
或者npm update
都没有更新package-lock.json文件中的依赖项.
我已经做了很多谷歌搜索,以及删除文件和完成npm install
.
如果有人能帮忙解决这个问题,我会非常感激.有问题的包是Hoek,我在package.json文件中实际上没有.
提前谢谢了.
我不小心删除了我的package-lock.json文件.npm install没有生成新的.如何让npm重新创建此文件.