随着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不可以?
如果我的包有这些依赖项
{ "name": "my-package",
"dependencies": { "foobar":"~1.0.3", "baz":"2.0.9" }
Run Code Online (Sandbox Code Playgroud)
并且foobar包具有这些依赖性
{ "name": "foobar",
"dependencies": { "baz":"^2.0.0" }
Run Code Online (Sandbox Code Playgroud)
和最近发布的版本baz是2.1.0,第一次运行yarn将安装baz@2.1.0在foobar/node_modules.
如何强制纱线使用baz@2.0.9包装foobar?
我的理解是这可以使用npm shrinkwrap(这个问题).
我的问题的摘要可能是:Yarn创建可重复的,确定性的安装,但我如何自定义该安装?
我们公司使用Artifactory存储库来存储内部发布的包,并作为NPM注册表的代理.有时resolvedlockfiles/shrinkwrap文件中的字段是预期的,包含我们内部存储库的URL,但有时它们会显示为这样的内容(为了清晰起见,添加了换行符):
https://our.repository.com/artifactory/api/npm/some-repo/lodash/-/lodash-3.10.1.tgz
?dl=https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz
Run Code Online (Sandbox Code Playgroud)
然后,从拉取请求到拉取请求,这些dl参数不断地振荡到存在或移除,这取决于哪个开发者做了npm install,导致大量拉取请求和提交噪声.
我猜这是Artifactory添加了这个dl参数,因为我没有在npm代码库中的代码搜索中看到它.
为什么会这样?我们可以禁用此行为吗?将此参数作为postshrinkwrap脚本解决方法剥离是否安全?
我来自一个更熟悉的背景composer.我正在gulp等待构建过程和学习node以及如何使用npm.
非常奇怪(再次,来自composer背景)composer.lock默认情况下不包括类似清单.话虽如此,我一直在阅读[shrinkwrap],[npm-lockdown]和[npm-seal]的文档....而且我阅读的文档越多,我就越难以选择(每个人都认为他们的方式是最好的方式).我注意到的一个问题是npm-seal在4年和npm-lockdown8个月内没有改变- 这一切都让我想知道这是否因为最新版本的npm...... 不需要它...
PS:Brownie指出,如果你包括每个的最基本的实现示例.;)
我尝试使用 npm 在我的 react 应用程序中安装一个包,但由于某种原因它失败了:它显示以下错误:
npm ERR! Object for dependency "@babel/generator" is empty.
npm ERR! Something went wrong. Regenerate the package-lock.json with "npm install".
npm ERR! If using a shrinkwrap, regenerate with "npm shrinkwrap".
Run Code Online (Sandbox Code Playgroud)
我尝试 npm install 重新生成 package-lock.json 但它和以前一样。
OSX仅fsevents列在其中,npm shrinkwrap因为它被拉入chokidar.我们的产品是基于Linux的,并没有造成任何麻烦,显然OSX开发人员也很好,但它打破npm install了我的Win x64环境.
我该如何解决这个问题?
C:\Users\User\Documents\splive>npm install
(node:2888) fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module, please update it to a more recent version.
> fsevents@1.0.8 install C:\Users\User\Documents\splive\node_modules\fsevents
> node-pre-gyp install --fallback-to-build
node-pre-gyp ERR! Tried to download: https://fsevents-binaries.s3-us-west-2.amazonaws.com/v1.0.8/fse-v1.0.8-node-v48-win32-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for fsevents@1.0.8 and node@6.3.0 (node-v48 ABI) (falling back to source compile with node-gyp)
Traceback (most recent call last):
File "C:\Users\User\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line …Run Code Online (Sandbox Code Playgroud) npm(我正在使用npm@5)是否有一种好方法可以为收缩包装/锁定文件项目中的嵌套依赖项进行版本提升?
执行 annpm install package@latest --save将按预期更新shrinkwrap 文件,但它也会添加对 的依赖package.json,这不是我想要的。执行 annpm install --no-save package@latest将正确跳过更新package.json,但它也不会更新shrinkwrap 文件。
有没有一种简单的方法可以在不接触的情况下更新子依赖项和收缩包装文件package.json?
我想将所有private_mod版本(根和嵌套级别)更新为1.3.2.有没有这样的方式呢?
注意:每个dependecy(dep-1,dep-2,dep-3)都有自己的dependecy package.json
我能想到的一种方法是:
- 生成shrinkwrap文件npm shrinkwrap
- npm-sharinkwrap.json为所有依赖项手动编辑较新版本的private_mod 文件-
再次安装npm以从shrinkwrap文件安装新软件包
我想从一个 npm shrinwrap json 文件中删除所有的 resloved。这会导致在其他机器上运行 npm install 时出现问题。
"cssstyle": {
"version": "0.2.37",
"from": "cssstyle@>=0.2.29 <0.3.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz"
},
"dashdash": {
"version": "1.14.0",
"from": "dashdash@>=1.12.0 <2.0.0",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz",
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"from": "assert-plus@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
}
}
},
"debug": {
"version": "2.2.0",
"from": "debug@>=2.2.0 <3.0.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz"
}
Run Code Online (Sandbox Code Playgroud)
如何从所有文件中删除已解析的密钥
我正在使用模式:
jq 'del(.resolved)' file.json
Run Code Online (Sandbox Code Playgroud) 当我使用命令时,npm-shrinkwrap.json的npm install所有resolved属性都将添加?dl=https://registry.npmjs.org/<package-name>。
例
...,
"@types/hammerjs": {
"version": "2.0.35",
"resolved": "https://npm.artifactory.transactdevops.com:443/artifactory/api/npm/npm-virtual/@types/hammerjs/-/hammerjs-2.0.35.tgz?dl=https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.35.tgz",
"integrity": "<key>",
"dev": true
},
...
Run Code Online (Sandbox Code Playgroud)
这些包来自Artifactory,.npmrc似乎与它无关。
我不知道“ dl”的含义以及发生这种不必要添加的原因,但是我想在添加(npm i --save)或更新依赖项并共享这些更改时保留一个干净的文件。
npm-shrinkwrap ×10
npm ×9
node.js ×5
artifactory ×2
dependencies ×2
lockfile ×2
fsevents ×1
jq ×1
json ×1
nested ×1
npm-install ×1
reactjs ×1
recursion ×1
yarnpkg ×1