рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдмрдЧред
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдирдП рдЬреЛрдбрд╝реЗ рдЧрдП рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╛рд░реНрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреЛрдбрд╝рд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдХ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдЧ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
yarn add [email protected]
yarn add [email protected]
$ 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 рдореЗрдВ рдирд╡реАрдиреАрдХреГрдд рд╣реБрдЖ рдФрд░ рдпрд╣ рдЕрднреА рднреА рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ...
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ 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;
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдЬ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ ЁЯСН