Cli: [BUG] `npm ci`` postinstall` рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдЕрдХреНрддреВре░ 2020  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: npm/cli

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░:

npm ci postinstall рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЪрд▓рддреА рд╣реИ

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░:

npm ci рдХреЛ postinstall рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛:

  1. рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреНрдпреВрдирддрдо рдкреИрдХреЗрдЬ рд░рдЦреЗрдВред
{
  "scripts": {
    "postinstall": "echo \"it should echo this\""
  }
}


  1. npm install рдЪрд▓рд╛рдПрдВ
  2. npm ci рдЪрд▓рд╛рдПрдВ
  3. рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ npm ci postinstall рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ

рд╡рд╛рддрд╛рд╡рд░рдг:

рдкреВрд░реНрд╡ред

  • рдУрдПрд╕: рдХреБрдмрдВрдЯреБ 20.04
  • рдиреЛрдб: 14.13.0
  • npm: 7.0.0-rc.0

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

@darcyclarke @isaacs рдкреНрд░рддреНрдпрдХреНрд╖ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА

рдпрд╣рд╛рдБ рдПрдХ рдиреНрдпреВрдирддрдо рд░реЗрдкреНрд░реЛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдореВрд▓ рдореБрджреНрджреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ:

{
  "scripts": {
    "prepare": "echo foo"
  }
}

npm@6 , рджреЛрдиреЛрдВ npm install рдФрд░ npm ci "рдлреВ"ред npm@7 , npm install рдкреНрд░рд┐рдВрдЯ "рдлреВ" рд▓реЗрдХрд┐рди npm ci рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрдорд╛рдВрдб рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдЗрдВрд╕реНрдЯреЙрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреНрд▓реЙрдХ рд╣реИ, рд▓реЗрдХрд┐рди ci рдХрдорд╛рдВрдб рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реИ:

https://github.com/npm/cli/blob/a28aff769a77f127f371c31afcb9e9814722e5cd/lib/install.js#L44 -L62

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдХрдо рд╕реЗ рдХрдо npm v6 рдФрд░ рдмрдЧ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╣реИред

preinstall , install & postinstall рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреА рдШрдЯрдирд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рддрдм рднрдбрд╝рдХ рдЬрд╛рддреА рд╣реИрдВ рдЬрдм рдПрдХ рдкреИрдХреЗрдЬ рдЦреБрдж рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдпрд╛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЖрдк npm run рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрддрд░ рдкрд░ install рдЪрд▓рд╛рдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдХрд┐рд╕реА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк hook scripts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрд░реНрдерд╛рдд, рдИрд╡реЗрдВрдЯ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ред ./node_modules/.hooks/ )ред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ / CLI рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдБ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╕рд┐рд░реНрдл рдЪреЗрди (рдпрд╛рдиреАред npm install x && npm run y , рдпрд╛ рд╣рдореЗрдВ install-test & install-ci-test рдЬреИрд╕реЗ рдЖрд╕рд╛рди рдХрдорд╛рдВрдб рдорд┐рд▓реЗ рд╣реИрдВ, рдЬреЛ npm install рддрдм npm run test рдЬреЛ рд╣реИ / рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдерд╛)

рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдирдкреАрдПрдо 6 рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдирдкреАрдПрдо 6:

image

рдПрдирдкреАрдПрдо 7:

image

рд╣рдореНрдо, рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЛ рд╢рд╛рдВрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдФрд░ рд╣рдордиреЗ рдЙрд╕ рдкрд░ рдПрдХ RFC рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛ (Refред Https://github.com/npm/rfcs/blob/latest/implemented/0022- quieter-install-scripts.md); рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдЙрди рдкрд░ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕реЗ рджрд░реНрдЬ рдХрд░реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдХрд┐рд╕реА рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдЦреЛрдж рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдпрд╣ рджреВрд╕рд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд╕реНрдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВред рдПрдХ рддрд╛рдЬрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣реБрд╕реНрдХреА рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ, рди рд╣реА рдпрд╣ рдЧрд┐рдЯ рд╣реБрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ NPM v6 рд╕реЗ NPM v7 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдмрд╛рдд рдЬреЛ рдУрдкреА рдХреЗ рдореБрджреНрджреЗ рд╕реЗ рдереЛрдбрд╝реА рдЕрд▓рдЧ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ (рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐) рдмрд╛рдж рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╣рд╕реНрдХреА рдХреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣реИрдВ, рди рдХрд┐ рд░реВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВред

рдЙрджрд╛рд╣рд░рдг npm ci рд╣реБрд╕реНрдХреА рдХреЗ рд▓рд┐рдП

$ npm ci
npm WARN prepare removing existing node_modules/ before installation

> [email protected] install ./atlas-server/node_modules/husky
> node husky install

husky > Setting up git hooks
husky > Done

> [email protected] postinstall ./atlas-server/node_modules/husky
> opencollective-postinstall || exit 0

Thank you for using husky!
If you rely on this package, please consider supporting our open collective:
> https://opencollective.com/husky/donate

...

рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ lerna рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ postinstall рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

  "scripts": {
    "postinstall": "lerna bootstrap",

https://github.com/mobilusoss/textlint-browser-runner/blob/master/package.json#L18

postinstall рдХреЛ npm ci рдмрд╛рдж TrapmCI рдкрд░ npm v 6.14.8 рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
https://travis-ci.com/github/mobilusoss/textlint-browser-runner/builds/191070080

рд▓реЗрдХрд┐рди npm v7.0.3 postinstall
https://travis-ci.com/github/mobilusoss/textlint-browser-runner/jobs/403527216

рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди lerna bootstrap рдмрд╛рдж npm ci lerna bootstrap рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВред рджреЛрдкрд╣рд░ 7.0.0 рдХреЗ рдмрд╛рдж рд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ

рд╢рд╛рдпрдж рдХреЗ рдХрд╛рд░рдг

рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (npm рдкрд░реАрдХреНрд╖рдг, npm рдкреНрд░рд╛рд░рдВрдн, npm рд░реЛрдХ, рдФрд░ npm рдкреБрдирд░рд╛рд░рдВрдн) рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдорд╛рдВрдб рдЕрдм рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВрдЧреЗ рднрд▓реЗ рд╣реА --ignore- рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯ рд╣реЛред GA v7.0.0 рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рдкреВрд░реНрд╡ / рдкреЛрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЪрд▓рд╛рдПрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред (рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП npm рдкрд░реАрдХреНрд╖рдг --ignore- рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд▓рд┐рдВрдЯрд░ рдХреЛ рдирд╣реАрдВред)

рдХреНрдпрд╛ рдЗрд╕реЗ рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ npm 7 рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ?

@darcyclarke @isaacs рдкреНрд░рддреНрдпрдХреНрд╖ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА

рдпрд╣рд╛рдБ рдПрдХ рдиреНрдпреВрдирддрдо рд░реЗрдкреНрд░реЛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдореВрд▓ рдореБрджреНрджреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ:

{
  "scripts": {
    "prepare": "echo foo"
  }
}

npm@6 , рджреЛрдиреЛрдВ npm install рдФрд░ npm ci "рдлреВ"ред npm@7 , npm install рдкреНрд░рд┐рдВрдЯ "рдлреВ" рд▓реЗрдХрд┐рди npm ci рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрдорд╛рдВрдб рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдЗрдВрд╕реНрдЯреЙрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреНрд▓реЙрдХ рд╣реИ, рд▓реЗрдХрд┐рди ci рдХрдорд╛рдВрдб рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реИ:

https://github.com/npm/cli/blob/a28aff769a77f127f371c31afcb9e9814722e5cd/lib/install.js#L44 -L62

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

admosity picture admosity  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zypA13510 picture zypA13510  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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