我默认配置了save-prefix,以添加'^'作为版本前缀。这对于我从npmjs安装的(无作用域和作用域)软件包非常有效。但是,对于来自我自己的注册表(verdaccio)的软件包,它不会附加前缀:
> npm install --save @my-scope/my-package
> cat package.json
...
"dependencies": {
"@my-scope/my-package": "0.0.42",
}
从this question中我了解到,保存前缀是本地的,不受注册表或package.json的影响。
我必须在本地为注册表配置保存前缀吗?如果是这样:如何/在哪里?
关于为什么我自己的注册表中的软件包不使用'^'的其他想法?
我的.npmrc看起来像这样:
@oblamatik:registry=https://npm.dev.***********.ch
//npm.dev.oblamatik.ch/:_password="***************"
//npm.dev.oblamatik.ch/:username=ci
//npm.dev.oblamatik.ch/:email=ci@***********.ch
//npm.dev.oblamatik.ch/:always-auth=true
答案 0 :(得分:1)
当前npm将0.0.x格式的版本视为不是有效的SemVer(https://npm.community/t/save-prefix-is-not-prepended-for-major-version-0/4618)。
我在该错误报告中表示了不同意,但目前的答案是:
请勿将npm的版本低于0.1.0。
即使从SemVer specification 2.0.0起它们是有效的SemVer,npm也将它们区别对待。作为参考,这是npm开发人员在其错误报告中发布的代码摘录:
if (isRegistry(requested)) {
var version = child.package.version
var rangeDescriptor = ''
if (semver.valid(version, true) &&
semver.gte(version, '0.1.0', true) &&
!npm.config.get('save-exact')) {
rangeDescriptor = npm.config.get('save-prefix')
}
return rangeDescriptor + version
}