NPM 安装来自 package.json 的不同版本
NPM installs different version from package.json
对于我们的 Electron 应用程序,我们需要特定版本的 pixi.js (5.0.0-rc.3)。因此,在我们的 package.json 中,我们指定了 "pixi.js": "^5.0.0-rc.3",
.
当我们 运行 npm install
现在打开我们的应用程序时,pixi 的欢迎消息和包-lock.json 状态版本 5.0.4。我们尝试删除 node_modules
文件夹并重新安装所有模块,但它仍然得到错误的版本。
我们在html文件中的import语句是const PIXI = require('pixi.js');
,如果我没有记错的话,这应该得到本地安装的pixi版本。
这是一个错误吗?还是故意的(如果是,是什么目的)?
更新
由于现在有一些答案和评论,以下是我们目前进一步尝试的方法:
- 删除
package-lock.json
、node_modules 文件夹(本地和全局)并再次 运行 npm i
- 重新安装 NodeJS (LTS)
- 使用当前版本的 NodeJS 测试了所有内容
- 从 package.json 中删除了“^”,因为它适用于 运行ge 安装中的任何版本
- 在另一台 Windows 10 机器和 macOS
上进行了测试
更新 2
现在有三个答案,none 可以解决目前的问题,我开始相信这不是我的错,但可能是 Pixi JS 的错误。我打开了一个问题 on their GitHub page,也许他们可以提供帮助。
如果要安装特定版本,请不要在 package.json
中使用 ~
或 ^
,请使用完全相同的版本
The tilde ~ matches the most recent patch version (the third number)
for the specified minor version (the second number).
~1.2.3 will match all 1.2.x versions but will hold off on 1.3.0.
The caret ^ is more relaxed. It matches the most recent minor version
(the second number) for the specified major version (the first
number).
^1.2.3 will match any 1.x.x release including 1.3.0, but will
hold off on 2.0.0.
你的情况:"pixi.js": "5.0.0-rc.3"
发件人:What's the difference between tilde(~) and caret(^) in package.json?
原答案
如果您绝对需要该版本,您应该:
- 将您的
package.json
文件更新为 "pixi.js": "5.0.0-rc.3"
。
- 删除现有的
package-lock.json
或 npm-shrinkwrap.json
文件。
- 重新运行
npm i
通过这样做,您将依赖固定到该特定版本。
另请查看此 semver calculator。您可以加载 pixi.js 包。然后输入 5.0.0-rc.3
和 ^5.0.0-rc.3
。它将向您展示 ^
如何改变查找匹配项的行为。
我发现对于某些人来说,与阅读文档相比,计算器在视觉上通常有助于更好地理解 semver 数学。
希望对您有所帮助!
更新答案
如果您查看 package-lock.json 文件并查看 pixi.js
的依赖项,所有依赖项都使用 ^
并且没有固定版本至 5.0.0-rc3
。相反,他们被强制升级到最新的补丁版本,即 5.0.4
和 NPM/pixis 端的设置,而不是你的。
"pixi.js": {
"version": "5.0.0-rc.3",
"resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.0.0-rc.3.tgz",
"integrity": "sha512-+B6ZMvJNEz/IoiC+BrwP9PsDonEAj4TOZw+yuZ/K8WQokcSm9uAp3PJ+6eFFWTjnkxsAcMP9tgldmDdTFoAF7w==",
"requires": {
"@pixi/accessibility": "^5.0.0-rc.3",
"@pixi/app": "^5.0.0-rc.3",
"@pixi/constants": "^5.0.0-rc.3",
"@pixi/core": "^5.0.0-rc.3",
"@pixi/display": "^5.0.0-rc.3",
"@pixi/extract": "^5.0.0-rc.3",
"@pixi/filter-alpha": "^5.0.0-rc.3",
"@pixi/filter-blur": "^5.0.0-rc.3",
"@pixi/filter-color-matrix": "^5.0.0-rc.3",
"@pixi/filter-displacement": "^5.0.0-rc.3",
"@pixi/filter-fxaa": "^5.0.0-rc.3",
"@pixi/filter-noise": "^5.0.0-rc.3",
"@pixi/graphics": "^5.0.0-rc.3",
"@pixi/interaction": "^5.0.0-rc.3",
"@pixi/loaders": "^5.0.0-rc.3",
"@pixi/math": "^5.0.0-rc.3",
"@pixi/mesh": "^5.0.0-rc.3",
"@pixi/mesh-extras": "^5.0.0-rc.3",
"@pixi/mixin-cache-as-bitmap": "^5.0.0-rc.3",
"@pixi/mixin-get-child-by-name": "^5.0.0-rc.3",
"@pixi/mixin-get-global-position": "^5.0.0-rc.3",
"@pixi/particles": "^5.0.0-rc.3",
"@pixi/polyfill": "^5.0.0-rc.3",
"@pixi/prepare": "^5.0.0-rc.3",
"@pixi/runner": "^5.0.0-rc.3",
"@pixi/settings": "^5.0.0-rc.3",
"@pixi/sprite": "^5.0.0-rc.3",
"@pixi/sprite-animated": "^5.0.0-rc.3",
"@pixi/sprite-tiling": "^5.0.0-rc.3",
"@pixi/spritesheet": "^5.0.0-rc.3",
"@pixi/text": "^5.0.0-rc.3",
"@pixi/text-bitmap": "^5.0.0-rc.3",
"@pixi/ticker": "^5.0.0-rc.3",
"@pixi/utils": "^5.0.0-rc.3"
}
},
看起来如果你想让它工作,我真的只是建议你更新你的应用程序以使用更新的包而不是这样做,你需要
- 在
5.0.0-rc3
标签上分叉 pixi.js,https://github.com/pixijs/pixi.js/tree/v5.0.0-rc.3
- 更新
package.json
文件,使其所有依赖项 5.0.0-rc.3
而不是 ^5.0.0-rc.3
- 创建对分叉存储库的依赖,而不是对已发布的 npm 模块的依赖。
TL;DR 解决方案是在您的 package.json
中明确指定 @pixi sub-modules 的确切版本,如下所示:
"dependencies": {
"@pixi/core": "5.0.0-rc.3",
... (all other pixi submodules here) ...
"pixi.js": "5.0.0-rc.3"
}
详细解释:
你正在安装pixi.js模块版本5.0.0-rc.3,但这实际上只是一堆pixi的容器sub-modules有自己的版本。 sub-module 依赖项指定为 @pixi/core": "^5.0.0-rc.3";
^
导致 npm 获取更新的版本。
我能够通过将它们添加到 package.json
文件中来控制 sub-modules 的版本,在 pixi.js
的依赖项旁边
以下是我用来确认发生了什么并列出 pixi sub-modules:
的步骤
npm init -y ## Create empty npm module
npm install pixi.js@5.0.0-rc.3 --save --save-exact ## Add pixi.js
cat package-lock.json ## See below
...
"@pixi/core": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.0.4.tgz",
"integrity": "sha512-P2K2JJC+BFZrRZT9P0+Ir8jd7VrH6w7/L1Njg2+iSetW9TdjkPahR+w93VGwpEzEkrYHoNs6FbSFCY38P/6g8A==",
"requires": {
"@pixi/constants": "^5.0.4",
"@pixi/display": "^5.0.4",
"@pixi/math": "^5.0.4",
"@pixi/runner": "^5.0.4",
"@pixi/settings": "^5.0.4",
"@pixi/ticker": "^5.0.4",
"@pixi/utils": "^5.0.4"
}
},
...
"pixi.js": {
"version": "5.0.0-rc.3",
"resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.0.0-rc.3.tgz",
"integrity": "sha512-+B6ZMvJNEz/IoiC+BrwP9PsDonEAj4TOZw+yuZ/K8WQokcSm9uAp3PJ+6eFFWTjnkxsAcMP9tgldmDdTFoAF7w==",
"requires": {
"@pixi/accessibility": "^5.0.0-rc.3",
"@pixi/app": "^5.0.0-rc.3",
"@pixi/constants": "^5.0.0-rc.3",
"@pixi/core": "^5.0.0-rc.3",
"@pixi/display": "^5.0.0-rc.3",
"@pixi/extract": "^5.0.0-rc.3",
"@pixi/filter-alpha": "^5.0.0-rc.3",
"@pixi/filter-blur": "^5.0.0-rc.3",
"@pixi/filter-color-matrix": "^5.0.0-rc.3",
"@pixi/filter-displacement": "^5.0.0-rc.3",
"@pixi/filter-fxaa": "^5.0.0-rc.3",
"@pixi/filter-noise": "^5.0.0-rc.3",
"@pixi/graphics": "^5.0.0-rc.3",
"@pixi/interaction": "^5.0.0-rc.3",
"@pixi/loaders": "^5.0.0-rc.3",
"@pixi/math": "^5.0.0-rc.3",
"@pixi/mesh": "^5.0.0-rc.3",
"@pixi/mesh-extras": "^5.0.0-rc.3",
"@pixi/mixin-cache-as-bitmap": "^5.0.0-rc.3",
"@pixi/mixin-get-child-by-name": "^5.0.0-rc.3",
"@pixi/mixin-get-global-position": "^5.0.0-rc.3",
"@pixi/particles": "^5.0.0-rc.3",
"@pixi/polyfill": "^5.0.0-rc.3",
"@pixi/prepare": "^5.0.0-rc.3",
"@pixi/runner": "^5.0.0-rc.3",
"@pixi/settings": "^5.0.0-rc.3",
"@pixi/sprite": "^5.0.0-rc.3",
"@pixi/sprite-animated": "^5.0.0-rc.3",
"@pixi/sprite-tiling": "^5.0.0-rc.3",
"@pixi/spritesheet": "^5.0.0-rc.3",
"@pixi/text": "^5.0.0-rc.3",
"@pixi/text-bitmap": "^5.0.0-rc.3",
"@pixi/ticker": "^5.0.0-rc.3",
"@pixi/utils": "^5.0.0-rc.3"
}
},
...
我 运行 遇到类似的问题,而不是需要 tildify 2.0.0,它总是安装 3.0.0 版本。
注-
我一直在尝试手动更新 package.json 文件以更改版本,但这 没有 帮助。
这是我使用的命令,最终挽救了我的一天 -
第 1 步 - 手动删除 node_modules 文件夹
第 2 步 - 从您的 package.json 目录,运行 此命令卸载软件包
npm uninstall <package_name>
例子-
npm uninstall tildify
第 3 步 - 从您的 package.json 目录,运行 此命令安装具有确切版本的包
npm install <package_name>@<package_version> --save-dev --save-exact
例子-
npm install tildify@2.0.0 --save-dev --save-exact
对于我们的 Electron 应用程序,我们需要特定版本的 pixi.js (5.0.0-rc.3)。因此,在我们的 package.json 中,我们指定了 "pixi.js": "^5.0.0-rc.3",
.
当我们 运行 npm install
现在打开我们的应用程序时,pixi 的欢迎消息和包-lock.json 状态版本 5.0.4。我们尝试删除 node_modules
文件夹并重新安装所有模块,但它仍然得到错误的版本。
我们在html文件中的import语句是const PIXI = require('pixi.js');
,如果我没有记错的话,这应该得到本地安装的pixi版本。
这是一个错误吗?还是故意的(如果是,是什么目的)?
更新
由于现在有一些答案和评论,以下是我们目前进一步尝试的方法:
- 删除
package-lock.json
、node_modules 文件夹(本地和全局)并再次 运行npm i
- 重新安装 NodeJS (LTS)
- 使用当前版本的 NodeJS 测试了所有内容
- 从 package.json 中删除了“^”,因为它适用于 运行ge 安装中的任何版本
- 在另一台 Windows 10 机器和 macOS 上进行了测试
更新 2
现在有三个答案,none 可以解决目前的问题,我开始相信这不是我的错,但可能是 Pixi JS 的错误。我打开了一个问题 on their GitHub page,也许他们可以提供帮助。
如果要安装特定版本,请不要在 package.json
中使用 ~
或 ^
,请使用完全相同的版本
The tilde ~ matches the most recent patch version (the third number) for the specified minor version (the second number).
~1.2.3 will match all 1.2.x versions but will hold off on 1.3.0.The caret ^ is more relaxed. It matches the most recent minor version (the second number) for the specified major version (the first number).
^1.2.3 will match any 1.x.x release including 1.3.0, but will hold off on 2.0.0.
你的情况:"pixi.js": "5.0.0-rc.3"
发件人:What's the difference between tilde(~) and caret(^) in package.json?
原答案
如果您绝对需要该版本,您应该:
- 将您的
package.json
文件更新为"pixi.js": "5.0.0-rc.3"
。 - 删除现有的
package-lock.json
或npm-shrinkwrap.json
文件。 - 重新运行
npm i
通过这样做,您将依赖固定到该特定版本。
另请查看此 semver calculator。您可以加载 pixi.js 包。然后输入 5.0.0-rc.3
和 ^5.0.0-rc.3
。它将向您展示 ^
如何改变查找匹配项的行为。
我发现对于某些人来说,与阅读文档相比,计算器在视觉上通常有助于更好地理解 semver 数学。
希望对您有所帮助!
更新答案
如果您查看 package-lock.json 文件并查看 pixi.js
的依赖项,所有依赖项都使用 ^
并且没有固定版本至 5.0.0-rc3
。相反,他们被强制升级到最新的补丁版本,即 5.0.4
和 NPM/pixis 端的设置,而不是你的。
"pixi.js": {
"version": "5.0.0-rc.3",
"resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.0.0-rc.3.tgz",
"integrity": "sha512-+B6ZMvJNEz/IoiC+BrwP9PsDonEAj4TOZw+yuZ/K8WQokcSm9uAp3PJ+6eFFWTjnkxsAcMP9tgldmDdTFoAF7w==",
"requires": {
"@pixi/accessibility": "^5.0.0-rc.3",
"@pixi/app": "^5.0.0-rc.3",
"@pixi/constants": "^5.0.0-rc.3",
"@pixi/core": "^5.0.0-rc.3",
"@pixi/display": "^5.0.0-rc.3",
"@pixi/extract": "^5.0.0-rc.3",
"@pixi/filter-alpha": "^5.0.0-rc.3",
"@pixi/filter-blur": "^5.0.0-rc.3",
"@pixi/filter-color-matrix": "^5.0.0-rc.3",
"@pixi/filter-displacement": "^5.0.0-rc.3",
"@pixi/filter-fxaa": "^5.0.0-rc.3",
"@pixi/filter-noise": "^5.0.0-rc.3",
"@pixi/graphics": "^5.0.0-rc.3",
"@pixi/interaction": "^5.0.0-rc.3",
"@pixi/loaders": "^5.0.0-rc.3",
"@pixi/math": "^5.0.0-rc.3",
"@pixi/mesh": "^5.0.0-rc.3",
"@pixi/mesh-extras": "^5.0.0-rc.3",
"@pixi/mixin-cache-as-bitmap": "^5.0.0-rc.3",
"@pixi/mixin-get-child-by-name": "^5.0.0-rc.3",
"@pixi/mixin-get-global-position": "^5.0.0-rc.3",
"@pixi/particles": "^5.0.0-rc.3",
"@pixi/polyfill": "^5.0.0-rc.3",
"@pixi/prepare": "^5.0.0-rc.3",
"@pixi/runner": "^5.0.0-rc.3",
"@pixi/settings": "^5.0.0-rc.3",
"@pixi/sprite": "^5.0.0-rc.3",
"@pixi/sprite-animated": "^5.0.0-rc.3",
"@pixi/sprite-tiling": "^5.0.0-rc.3",
"@pixi/spritesheet": "^5.0.0-rc.3",
"@pixi/text": "^5.0.0-rc.3",
"@pixi/text-bitmap": "^5.0.0-rc.3",
"@pixi/ticker": "^5.0.0-rc.3",
"@pixi/utils": "^5.0.0-rc.3"
}
},
看起来如果你想让它工作,我真的只是建议你更新你的应用程序以使用更新的包而不是这样做,你需要
- 在
5.0.0-rc3
标签上分叉 pixi.js,https://github.com/pixijs/pixi.js/tree/v5.0.0-rc.3 - 更新
package.json
文件,使其所有依赖项5.0.0-rc.3
而不是^5.0.0-rc.3
- 创建对分叉存储库的依赖,而不是对已发布的 npm 模块的依赖。
TL;DR 解决方案是在您的 package.json
中明确指定 @pixi sub-modules 的确切版本,如下所示:
"dependencies": {
"@pixi/core": "5.0.0-rc.3",
... (all other pixi submodules here) ...
"pixi.js": "5.0.0-rc.3"
}
详细解释:
你正在安装pixi.js模块版本5.0.0-rc.3,但这实际上只是一堆pixi的容器sub-modules有自己的版本。 sub-module 依赖项指定为 @pixi/core": "^5.0.0-rc.3";
^
导致 npm 获取更新的版本。
我能够通过将它们添加到 package.json
文件中来控制 sub-modules 的版本,在 pixi.js
以下是我用来确认发生了什么并列出 pixi sub-modules:
的步骤npm init -y ## Create empty npm module
npm install pixi.js@5.0.0-rc.3 --save --save-exact ## Add pixi.js
cat package-lock.json ## See below
... "@pixi/core": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.0.4.tgz", "integrity": "sha512-P2K2JJC+BFZrRZT9P0+Ir8jd7VrH6w7/L1Njg2+iSetW9TdjkPahR+w93VGwpEzEkrYHoNs6FbSFCY38P/6g8A==", "requires": { "@pixi/constants": "^5.0.4", "@pixi/display": "^5.0.4", "@pixi/math": "^5.0.4", "@pixi/runner": "^5.0.4", "@pixi/settings": "^5.0.4", "@pixi/ticker": "^5.0.4", "@pixi/utils": "^5.0.4" } }, ... "pixi.js": { "version": "5.0.0-rc.3", "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.0.0-rc.3.tgz", "integrity": "sha512-+B6ZMvJNEz/IoiC+BrwP9PsDonEAj4TOZw+yuZ/K8WQokcSm9uAp3PJ+6eFFWTjnkxsAcMP9tgldmDdTFoAF7w==", "requires": { "@pixi/accessibility": "^5.0.0-rc.3", "@pixi/app": "^5.0.0-rc.3", "@pixi/constants": "^5.0.0-rc.3", "@pixi/core": "^5.0.0-rc.3", "@pixi/display": "^5.0.0-rc.3", "@pixi/extract": "^5.0.0-rc.3", "@pixi/filter-alpha": "^5.0.0-rc.3", "@pixi/filter-blur": "^5.0.0-rc.3", "@pixi/filter-color-matrix": "^5.0.0-rc.3", "@pixi/filter-displacement": "^5.0.0-rc.3", "@pixi/filter-fxaa": "^5.0.0-rc.3", "@pixi/filter-noise": "^5.0.0-rc.3", "@pixi/graphics": "^5.0.0-rc.3", "@pixi/interaction": "^5.0.0-rc.3", "@pixi/loaders": "^5.0.0-rc.3", "@pixi/math": "^5.0.0-rc.3", "@pixi/mesh": "^5.0.0-rc.3", "@pixi/mesh-extras": "^5.0.0-rc.3", "@pixi/mixin-cache-as-bitmap": "^5.0.0-rc.3", "@pixi/mixin-get-child-by-name": "^5.0.0-rc.3", "@pixi/mixin-get-global-position": "^5.0.0-rc.3", "@pixi/particles": "^5.0.0-rc.3", "@pixi/polyfill": "^5.0.0-rc.3", "@pixi/prepare": "^5.0.0-rc.3", "@pixi/runner": "^5.0.0-rc.3", "@pixi/settings": "^5.0.0-rc.3", "@pixi/sprite": "^5.0.0-rc.3", "@pixi/sprite-animated": "^5.0.0-rc.3", "@pixi/sprite-tiling": "^5.0.0-rc.3", "@pixi/spritesheet": "^5.0.0-rc.3", "@pixi/text": "^5.0.0-rc.3", "@pixi/text-bitmap": "^5.0.0-rc.3", "@pixi/ticker": "^5.0.0-rc.3", "@pixi/utils": "^5.0.0-rc.3" } }, ...
我 运行 遇到类似的问题,而不是需要 tildify 2.0.0,它总是安装 3.0.0 版本。
注-
我一直在尝试手动更新 package.json 文件以更改版本,但这 没有 帮助。
这是我使用的命令,最终挽救了我的一天 -
第 1 步 - 手动删除 node_modules 文件夹
第 2 步 - 从您的 package.json 目录,运行 此命令卸载软件包
npm uninstall <package_name>
例子-
npm uninstall tildify
第 3 步 - 从您的 package.json 目录,运行 此命令安装具有确切版本的包
npm install <package_name>@<package_version> --save-dev --save-exact
例子-
npm install tildify@2.0.0 --save-dev --save-exact