Название немного невнятное. Другими словами: когда .npmrc
(или, предположительно, .yarnrc
) настроены с _обо_ частным URL-адресом реестра _и_ токеном аутентификации для публикации в общедоступном npm, установка пакетов с ограниченной областью видимости прерывается. Рассматриваемый здесь частный реестр - это Artifactory, и действующая теория заключается в том, что Yarn отправляет кредиты (_неправильно_: конфигурация предназначена для двух разных URL-адресов), что Artifactory не устраивает, и 401-е (поскольку кредиты предназначены для общедоступного npm, не Artifactory). Я не уверен, почему пакеты с областью видимости будут обрабатываться по-другому, иначе все работает нормально.
Ниже приведены некоторые команды для иллюстрации:
> pwd
~
> cat .yarnrc
cat: .yarnrc: No such file or directory
> cat .npmrc
registry=<private registry URL that works fine with npm and non-scoped packages>
//registry.npmjs.org/:_authToken=<my auth token>
> yarn add @types/d3-scale --verbose
yarn add v0.19.1
info No lockfile found.
verbose Performing "GET" request to "https://yarnpkg.com/latest-version".
[1/4] 🔍 Resolving packages...
verbose Performing "GET" request to "<correct private registry URL ...>/@types%2fd3-scale".
verbose Request "<correct private registry URL ...>/@types%2fd3-scale" finished with status code 401.
verbose Error: Couldn't find package "@types/d3-scale" on the "npm" registry.
at MessageError (/usr/local/Cellar/yarn/0.19.1/libexec/lib/node_modules/yarn/lib/errors.js:8:5)
at /usr/local/Cellar/yarn/0.19.1/libexec/lib/node_modules/yarn/lib/resolvers/registries/npm-resolver.js:207:15
at next (native)
at step (/usr/local/Cellar/yarn/0.19.1/libexec/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
at /usr/local/Cellar/yarn/0.19.1/libexec/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:28:13
at process._tickCallback (internal/process/next_tick.js:103:7)
error Couldn't find package "@types/d3-scale" on the "npm" registry.
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
> npm install @types/d3-scale
~
└─┬ @types/[email protected]
└── @types/[email protected]
> yarn add d3-scale
yarn add v0.19.1
info No lockfile found.
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 📃 Building fresh packages...
success Saved lockfile.
success Saved 8 new dependencies.
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
└─ [email protected]
✨ Done in 2.45s.
# edit .npmrc...
> cat .npmrc
registry=<same registry URL>
> yarn add @types/d3-scale
yarn add v0.19.1
warning No license field
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 📃 Building fresh packages...
success Saved lockfile.
success Saved 2 new dependencies.
├─ @types/[email protected]
└─ @types/[email protected]
warning No license field
✨ Done in 1.50s.
В качестве дополнительного фона экземпляр Artifactory настроен для разрешения анонимного доступа. Если вы не предоставите учетные данные, вы можете читать все, что захотите. Если вы предоставите какие-либо учетные данные, Artifactory попытается проверить их и вернет статус 401 (в данном случае, потому что пользователь не существует).
Я думаю, что это оскорбительная строка кода: https://github.com/yarnpkg/yarn/blob/master/src/registries/npm-registry.js#L56 (последний пункт).
Читая в контексте, кажется, что автор предполагает, что "scoped" подразумевает "аутентифицированный".
В прошлую пятницу была такая же проблема, пришлось удалить токен аутентификации из ~ / .npmrc, чтобы иметь возможность загружать пакет с ограниченным объемом из локального артефакта.
Самый полезный комментарий
Я думаю, что это оскорбительная строка кода: https://github.com/yarnpkg/yarn/blob/master/src/registries/npm-registry.js#L56 (последний пункт).
Читая в контексте, кажется, что автор предполагает, что "scoped" подразумевает "аутентифицированный".