NPM package.json 将 * 星号转换为版本

问题描述 投票:0回答:2

我的模板中有一个包含多个依赖项的 package.json。 如果我想创建一个新项目,我会使用我的模板。 但是如何将所有

*
(星号/最新版本)转换为从npm下载的固定版本。
npm install --save
不起作用。

npm install 之前(模板 package.json)

"devDependencies": {
  "one": "*",
  "two": "*",
  "three": "*"
}

应转换为以下

npm i --save

"devDependencies": {
  "one": "1.0.0",
  "two": "2.0.0",
  "three": "3.0.0"
}

如何覆盖版本字符串?

npm package.json
2个回答
0
投票

根据 文档

(*) --> 匹配任何版本

("") --> (只是一个空字符串)与 *

相同

此问题的解决方法是 shrinkwrap(阅读文档以获取更多信息)。您可以使用此命令

npm shrinkwrap
。这将创建一个 npm-shrinkwrap.json 文件。当您运行该命令时,您会在控制台上看到以下注释(npm 通知 package-lock.json 已重命名为 npm-shrinkwrap.json。npm-shrinkwrap.json 将用于将来的安装。)。这将提供更新后的软件包版本,无论您在 package.json 中拥有什么。


0
投票

使用

npm list --depth=0
查看通过从模板安装“最新”来安装的版本。你应该得到这样的东西:

├── @angular-devkit/[email protected]
├── @angular-devkit/[email protected]
├── @angular-eslint/[email protected]

将输出复制、修改并粘贴到 package.json 中。那么您可能应该删除 node_modules 并检查运行

npm ci
是否正常工作。

备注:

  1. 这就是您应该在 package.json 中指定所需版本的方式:
"react": "^16.0.0" // carat: allow 16.1.0
"react": "~16.0.0" // tilde: allow 16.0.1
"react": "16.0.0" // exact: only 16.0.0
  1. 如果您的模板相当复杂,那么这种工作流程不太可能方便。我建议仔细组合模板中的特定版本,以便它们发挥作用。然后,每隔几个月,您应该(再次小心地)升级模板中的库。否则,迟早你会安装一些冲突的软件包的两个最新版本。
© www.soinside.com 2019 - 2024. All rights reserved.