κΈ°λ₯ μ μμ²νκ±°λ λ²κ·Έλ₯Όλ³΄κ³ νμκ² μ΅λκΉ?
κ³€μΆ©.
νμ¬ νλμ 무μμ
λκΉ?
Yarnμ μλ‘ μΆκ° λ μ’
μμ±μ μ’
μμ±μ ν΄κ²°ν λ μ΄λ―Έ μΆκ° λ λ²μ μ κΈμ λ°λ₯΄μ§ μμ΅λλ€.
νμ¬ λμμ΄ λ²κ·Έ μΈ κ²½μ° μ¬ν λ¨κ³λ₯Ό μ 곡νμμμ€.
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] λ§ μ€μΉ λ κ²μΌλ‘ μμλ©λλ€. λ μ’
μμ±μ΄ λͺ¨λ package.json λ° yarn install
μμλ ν yarn.lock
μμ νλ©΄ μ΄λ° μΌμ΄ λ°μν©λλ€.
$ rm -rf node_modules/ yarn.lock && yarn install && yarn list react
yarn list v1.1.0
ββ [email protected]
β¨ Done in 0.17s.
node.js, yarn λ° μ΄μ 체μ λ²μ μ μΈκΈνμμμ€.
$ node --version
v6.9.4
$ yarn --version
1.2.0
$ system_profiler SPSoftwareDataType|grep "System Version"
System Version: macOS 10.12.6 (16G29)
νΈμ§ : μλ μ¬νμ yarn v.1.1.0μΌλ‘ μνλμμ§λ§ 1.2.0μΌλ‘ μ κ·Έλ μ΄λνλλ° μ¬μ ν μ¬νλ©λλ€.
λλ μ΄κ²μ νν€ μΉκ³ μλ€ ...
PackageResolver.getHighestRangeVersionMatch(name, range, manifest)
μ λ¬ λ λ§€κ° λ³μκ° μ¬λ°λ₯΄μ§ μμ μ μμμ μ립λλ€. μ λ¬ λ range
μ μμ² λ λ²μ ( ^15.5.4
) λμ μ€μ ν΄κ²° λ λ¨μΌ λ²μ ( 15.6.2
) μΈ κ² κ°μ΅λλ€.
κ·Έλ¬λ©΄ νμ¬ μ€μΉλ λ²μ μ΄ semver λ²μμ μΌμΉνλμ§ νμΈνλ νκΉμ§ λΉλλ©λλ€. 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 μ°κ²°λ PRμ΄ κ·νμ κ² κ°μ΅λλ€. λλ 무μμ΄λ λ³κ²½νλ κ²μ λ§μ€μ΄κ³ PRμ΄ μμ ν κ²μ λ€μ μ΄ μνμ΄ μμ΅λλ€. μ μ’ λΉλ €μ£Ό μκ² μ΄μ?
μ€λ μ΄κ²μ μ΄ν΄λ³Ό κ²μ λλ€ π
Sooo, κ³ μ³ λ³΄μ! νμ§λ§, μ°λ¦¬κ° λ ν¨μ¨μ μ΄ λ μμλ κ²λ³΄λ€ λ§λλ ν° μ€ νλ μλλ€ - λλνμ§ κ·Έ ν¨ν€μ§ (μ°λ¦¬λμ΄ λ¬Έμ λ₯Ό ν΄κ²°νλλΌλ, κ·Έλ€μ λμ€μ λ€μ μ€λ¨λ©λλ€ λ΄ λ§μ νμ) κΆμμ μμ‘΄νκ³ μ’μνλ€. λ΄κ° # 5561μ μ¬λ¦° κ²μ λ€μ κ²μ :
μμ λ Όλ¦¬λ₯Ό μ λ§λ‘ μ΄ν΄νμ§ λͺ»ν©λλ€. λ²μκ° μ ν¨ν semverμ΄λ©΄ μ¬μ©νμ§ μμ΅λκΉ?
λΉμ μ λ§μ μ΄ν΄κ°λμ§ μμ΅λλ€ λ§μμμ / λ΄κ°νκ³ μΆμλ κ²μ μκ°μ΄μλ€ "μ΄ λ²μ μ΄ μλλΌ λ²μμ κ²½μ°, μ°λ¦¬λ μ΄λ―Έ κ°λ₯νλ©΄ κ°μ§κ³ μλ νλλ₯Ό μ¬μ©νμμμ€"λͺ©ν λλ¬Έμ ( PRμ μ κΈ νμΌμμ μ½μ λ μ΅μ νλ₯Ό μννμ§ μλ κ²μ λλ€). λ°λΌμ 쑰건μ λ€μκ³Ό κ°μμΌν©λλ€.
const solvedRange = semver.valid(range) && !semver.validRange(range) ? range : info.version;
κ°μ₯ μ μ©ν λκΈ
μ€λ μ΄κ²μ μ΄ν΄λ³Ό κ²μ λλ€ π