Yarn: рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдмрд╛рдзрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЕрдХреНрддреВре░ 2017  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: yarnpkg/yarn

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдмрдЧред

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдирдП рдЬреЛрдбрд╝реЗ рдЧрдП рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╛рд░реНрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреЛрдбрд╝рд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдХ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдЧ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

  1. рдПрдХ рдЦрд╛рд▓реА рдореЙрдбреНрдпреВрд▓ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ
  2. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗрдВ 15.6.1 yarn add [email protected]
  3. [email protected] yarn add [email protected]
  4. рдмрдЧ рдкреБрди: рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:
$ yarn list react
yarn list v1.1.0
тФЬтФА [email protected]
тФФтФА [email protected]
   тФФтФА [email protected]
тЬи  Done in 0.24s.

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ [email protected] рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдг рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдЧрд░ рдореИрдВ рд╣рдЯрд╛рдирд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ yarn.lock рдХреЗ рдмрд╛рдж рджреЛрдиреЛрдВ рдирд┐рд░реНрднрд░рддрд╛ package.json рдореЗрдВ рд╣реИрдВ рдФрд░ yarn install рдпрд╛рдиреА

$ rm -rf node_modules/ yarn.lock && yarn install && yarn list react
yarn list v1.1.0
тФФтФА [email protected]
тЬи  Done in 0.17s.

рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдиреЛрдб.рдЬреЗрдПрд╕, рдпрд╛рд░реНрди рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред

$ node --version
v6.9.4
$ yarn --version
1.2.0
$ system_profiler SPSoftwareDataType|grep "System Version"
      System Version: macOS 10.12.6 (16G29)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореВрд▓ repro рдпрд╛рд░реНрди v.1.1.0 рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ 1.2.0 рдореЗрдВ рдирд╡реАрдиреАрдХреГрдд рд╣реБрдЖ рдФрд░ рдпрд╣ рдЕрднреА рднреА рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

cat-bug high-priority triaged

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдЬ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ ЁЯСН

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЗрд╕рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ...

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ PackageResolver.getHighestRangeVersionMatch(name, range, manifest) рдЧрд▓рдд рд╣реИрдВред рдЕрдиреБрд░реЛрдзрд┐рдд рд╕реАрдорд╛ ( ^15.5.4 ) рдХреЗ рдмрдЬрд╛рдп range рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХрд▓ рд╕рдВрд╕реНрдХрд░рдг ( 15.6.2 ) рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдмрджрд▓реЗ рдореЗрдВ рдпрд╣ рдЙрд╕ рд░реЗрдЦрд╛ рддрдХ рдмрдирддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдореМрдЬреВрджрд╛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рд╕реЗрдорд░ рд╢реНрд░реЗрдгреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ: semver.maxSatisfying(["15.6.1"], '15.6.2'); // null рдпрджрд┐ рд╕рд╣реА рд╕реАрдорд╛ рдкрд╛рд░ рдХреА рдЧрдИ рд╣реЛрддреА, рддреЛ рдпрд╣ semver.maxSatisfying(["15.6.1"], '^15.5.4'); // 15.6.1 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВред

рдореИрдВ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдЫреЗ рд╣рдЯрдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдБрдЧрд╛ ...

рдареАрдХ рд╣реИ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ # 3729 рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ package-request.js рдореЗрдВ рд▓рд╛рдЗрди:

const solvedRange = semver.validRange(range) ? info.version : range;

рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╢реНрд░реЗрдгреА ( ^15.5.4 ) рдорд╛рдиреНрдп рд╣реИ, рддреЛ рд╣рдо info.version рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ( 15.6.2 )ред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг 15.6.2 рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ:

const maxValidRange = semver.maxSatisfying(['15.6.1'], '15.6.2'); // null

@arcanis рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдкреАрдЖрд░ рдЖрдкрдХрд╛ рдерд╛ред рдореБрдЭреЗ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдкреАрдЖрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рд╣реИред рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╣рд╛рде рдЙрдзрд╛рд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

рдЖрдЬ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ ЁЯСН

Sooo, рдЪрд▓реЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ! рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдЙрддреНрдерд╛рдкрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдореЗрд░реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ - рднрд▓реЗ рд╣реА рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рд▓реЗрдВ, рд╡реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЯреВрдЯ

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рддрд░реНрдХ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдпрджрд┐ рд░реЗрдВрдЬ рдПрдХ рд╡реИрдз рд╕реЗрдорд░ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ?

рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ: / рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╣ рдерд╛ "рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реАрдорд╛ рд╣реИ, рддреЛ рд╣рдо рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" (рд▓рдХреНрд╖реНрдп рдХреЗ рдмрд╛рдж рд╕реЗ PR рдХреЛ рд▓реЙрдХрдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░рдирд╛ рдерд╛)ред рдЗрд╕ рддрд░рд╣ рдХреА рд╣рд╛рд▓рдд рд╢рд╛рдпрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

const solvedRange = semver.valid(range) && !semver.validRange(range) ? range : info.version;
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ocolot picture ocolot  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

baptistelebail picture baptistelebail  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

davidmaxwaterman picture davidmaxwaterman  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

catkins picture catkins  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mnpenner picture mnpenner  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ