我在更新 npm 包时遇到问题,这表明我缺乏理解peerDependencies和/或^ caret版本范围。
我的项目my-app依赖于awesome-lib版本 中的包6.1.0。\n它还依赖于miracle-lib版本 中的包3.2.0-alpha.2。
该包miracle-lib@3.2.0-alpha.2有一个peerDependencyto awesome-lib@^6.1.0(注意^ caret)。
跑步npm install跑得很好。\xe2\x9c\x93
我想使用awesome-lib从一个6.1.0版本更新到另一个版本6.2.0-alpha.1
npm install awesome-lib@6.2.0-alpha.1\nRun Code Online (Sandbox Code Playgroud)\n但这会产生以下错误:
\nnpm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree\nnpm ERR!\nnpm ERR! While resolving: my-app@1.0.0\nnpm ERR! Found: awesome-lib@6.2.0-alpha.1\nnpm ERR! node_modules/awesome-lib\nnpm ERR! awesome-lib@"6.2.0-alpha.1" from …Run Code Online (Sandbox Code Playgroud) javascript dependency-management npm semantic-versioning typescript
PNPM 似乎完全安装了 package.json 中指定的版本,并且似乎没有安装最新的次要版本。
例如,在我的 package.json 中我有这个依赖项
"@tanstack/react-query": "^4.13.5"
但是在安装时,pnpm 给出了这条消息
@tanstack/react-query 4.13.5 (4.29.5 is available)
所以我的问题是,为什么 pnpm不像 npm 使用插入符号那样安装4.29.5 ?我该如何实现这一目标?
语义版本控制规范中的第一点指出兼容软件必须声明公共API.
我想知道宝石是如何建立这个公共API的.看起来它通常是通过自述文件完成的(例如,参见ActiveRecord),它不觉得它在公共API代码和其他代码之间划出了严格的界限.更好地执行此操作的gem的一个示例是Twitter API,将其公共API代码放在API目录中,但即使在那里,该行也是灰色的,因为公共API的configure方法在API目录之外的twitter.rb中定义.
作为一个试图坚持语义版本控制的宝石的潜在贡献者(这是他们中的大多数,因为我们有像bundler这样的工具),我想知道哪些方法是公共API的一部分,哪些不是.也许我必须查看更多的源代码,但有没有明确定义您的公共API的指导方针?
我想知道版本控制package.json在开发周期中的工作原理.
一个package.json版本属性中每个数字的含义是什么,例如下面的那个?
{
"name": "A NodeJS Project",
"version": "0.0.0",
...
}
Run Code Online (Sandbox Code Playgroud) 在红宝石生态系统(甚至其他地方)中是否有功能(即,我可以用它bundler和rubygems替代)SemVer?
我对SemVer(MAJOR.MINOR.PATCH)的问题在于它试图量化两个不兼容的东西:
PATCH仍然很可能是一个突破性的变化,这使得它等于MAJOR而小于MINOR,而MINOR小于MAJOR.所以:
PATCH == MAJOR && MAJOR > MINOR && MINOR > PATCH
Run Code Online (Sandbox Code Playgroud)
这意味着PATCH <> MINOR同时,这永远不会是真的.
理想情况下,我希望有两个版本控制线 - 一个基于向后兼容性(例如没有破损,可能难以察觉的破损(==补丁),破坏)和一个基于变化大小(无视向后兼容性),一个人性化的版本行,如果你愿意的话.我希望能够同时使用它们.
(仅使用基于纯后向兼容性的版本控制,只要操作系统通过向屏幕写入"hello world"开始,我就可以从"hello world"转到操作系统.)
例如:如果H代表人类友好的版本控制,而B代表向后兼容性是基于后向兼容性的,那么我希望能够说:
我有一个iOS应用程序,它使用语义版本标记来标记已发布的版本.我还使用Apple的TestFlight将内部构建推送到团队进行测试/ QA.
推送内部版本需要将版本上传到iTunes Connect.iTunes Connect的测试版本和发布版本没有区别,iTunes Connect不允许覆盖以前上传的版本.因此,每当我想推出一个新的内部测试版本时,我都要修改版本号(好吧,补丁(XX X)号码).
这工作正常,除了我们的用户看起来我们的版本号在更新之间跳了很多.例如,如果这是我们的构建历史记录:
v1.0.0v1.0.1 (在测试中发现了bug)v1.0.2v1.1.0 (在测试中发现了bug)v1.1.1 (在测试中发现了bug)v1.1.2...然后用户只看到大胆的版本,我们的发布历史看起来很奇怪:
v1.0.0v1.0.2v1.1.2我认为避免这种情况的一个好方法是使用beta版本,例如v1.1.0-beta测试版本,但iTunes Connect拒绝任何不是的版本字符串X.X.X.
有没有办法继续使用TestFlight进行内部测试/ QA,并避免向用户出现填补空白的版本历史记录?
这是我试图在AppVeyor中实现的行为
1.2.3.{build})1.2.3-beta-{build})理想情况下,在发布nuget包时,它将作为预发行版发布.在NuGet中,这是通过在包版本的末尾添加字母字符来完成的.覆盖现有包也被认为是不好的做法(实际上,许多nuget实现不允许这样做).
AppVeyor可以很好地从github构建和测试软件,但我似乎无法控制nuget软件包版本.
给定:具有下一个语义版本1.2.3的包我希望AppVeyor {version}变量等于1.2.3.{build}
我希望nuget包版本等同于1.2.3-beta-{build}
我尝试的第一件事就是在{version}框中使用变量.显然这是不允许的.AppVeyor似乎只做变量替换,{branch}并{build}作为其中的一部分{version}.这意味着我将不得不为语义版本维护一个单独的变量.
我遇到的下一个挑战是无法通过UI设置nuget包版本.它希望默认与AppVeyor构建版本相同.
我决定在测试运行后尝试使用Powershell创建包.这是有效的,但是Nuget Publish步骤想要在创建包之前运行,并且似乎没有办法控制执行顺序.
我想我走错了路.我需要一个概念性的重置.
这是我的appveyor.yml当前(不正确)状态:
version: 0.1.0.{build}
configuration: Release
assembly_info:
patch: true
file: '**\AssemblyInfo.*'
assembly_version: '{version}'
assembly_file_version: '{version}'
assembly_informational_version: '{version}'
environment:
packageVersion: 0.1.0
nuget:
account_feed: true
project_feed: true
disable_publish_on_pr: true
before_build:
- ps: nuget restore
build:
verbosity: minimal
artifacts:
- path: '*.nupkg'
name: nuget package
deploy:
- provider: NuGet
api_key:
secure: blahblahblah
artifact: '*.nupkg' …Run Code Online (Sandbox Code Playgroud) 在我的JavaScript应用程序中,我可能在我的package.json文件中声明了几十个依赖项.
需要一段时间才能浏览每个依赖项并查看它们所在的版本.
我只想说:使用最新的主要版本,但不是前沿.
作为一个例子,使用像Git这样的工具我通常不关心在补丁级别进行更改,但如果出现新的主要版本,我会想要它.
在指定npm模块的版本时是否有类似的概念?
我正在使用 ubuntu 19.04。
尝试使用 npm 执行任何操作时出现以下错误
internal/modules/cjs/loader.js:638
throw err;
^
Error: Cannot find module 'semver'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/usr/share/npm/lib/utils/unsupported.js:2:14)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
Run Code Online (Sandbox Code Playgroud)
我试图从 SO 中应用不同的解决方案,但不幸的是它们没有奏效。
它在重新安装 NPM 后开始发生,因为我不幸无法重新创建一些错误。
我试过的
sudo apt purge nodejs
sudo apt autoremove
Run Code Online (Sandbox Code Playgroud)
经过这两个步骤,npm 就被卸载了。
npm -v
bash: /usr/bin/npm: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我继续
sudo apt install nodejs
Run Code Online (Sandbox Code Playgroud)
但是,即使在我清除了文件后也会发生错误
User@User:/$ node -v
v10.16.3 …Run Code Online (Sandbox Code Playgroud) npm ×5
node.js ×2
ruby ×2
app-store ×1
appveyor ×1
gem ×1
ios ×1
javascript ×1
nuget ×1
pnpm ×1
purescript ×1
reactjs ×1
testflight ×1
typescript ×1
ubuntu ×1