Cli: [BUG] npm ci๋Š” ํ˜ธ์ŠคํŠธ os์™€ ๋‹ค๋ฅธ OS๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋Š” ์„ ํƒ์  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 12์›” 05์ผ  ยท  32์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: npm/cli

๋ญ? ์™œ

npm ci๋Š” Mac์—์„œ ์‹คํ–‰ํ•  ๋•Œ Linux OS์— ๋Œ€ํ•œ ์„ ํƒ์  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ Linux์—์„œ ์‹คํ–‰ํ•  ๋•Œ Mac์— ๋Œ€ํ•œ ์„ ํƒ์  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์–ธ์ œ

$ npm init -y; npm i [email protected]; npm ls; npm ci; npm ls
์œ„ ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ ๋ณด๋ ค๋ฉด ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.
 /private/tmp/d/package.json์— ์ผ์Šต๋‹ˆ๋‹ค.

 {
 "๋ช…๋ช… ๋œ",
 "๋ฒ„์ „": "1.0.0",
 "์„ค๋ช…": "",
 "main": "index.js",
 "์Šคํฌ๋ฆฝํŠธ": {
 "test": "echo \"์˜ค๋ฅ˜ : ์ง€์ •๋œ ํ…Œ์ŠคํŠธ ์—†์Œ \ "&& exit 1"
 },
 "ํ‚ค์›Œ๋“œ": [],
 "์ €์ž": "",
 "license": "ISC"
 }



 > [email protected] ์„ค์น˜ ํ›„ / private / tmp / d / node_modules / oax
 > ๋…ธ๋“œ ./postinstall.js

 npm ์•Œ๋ฆผ์€ lockfile์„ package-lock.json์œผ๋กœ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
 npm WARN [email protected] ์„ค๋ช… ์—†์Œ
 npm WARN [email protected] ์ €์žฅ์†Œ ํ•„๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
 npm ๊ฒฝ๊ณ  ์„ ํƒ์  ์ƒ๋žต ์„ ํƒ์  ์ข…์†์„ฑ : [email protected] (node_modules / oax / node_modules / oax-windows-64) :
 npm ๊ฒฝ๊ณ  ์•Œ๋ฆผ ๊ฑด๋„ˆ ๋›ฐ๊ธฐ ์˜ต์…˜ ์ข…์†์„ฑ : [email protected] ์šฉ ์ง€์›๋˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ : { "os": "win32", "arch": "x64"}๋ฅผ ์›ํ•จ (ํ˜„์žฌ : { "os": "darwin", "์•„์น˜": "x64"})
 npm ๊ฒฝ๊ณ  ์„ ํƒ์  ๊ฑด๋„ˆ ๋›ฐ๊ธฐ ์„ ํƒ์  ์ข…์†์„ฑ : [email protected] (node_modules / oax / node_modules / oax-linux-64) :
 npm ๊ฒฝ๊ณ  ์•Œ๋ฆผ ๊ฑด๋„ˆ ๋›ฐ๊ธฐ ์˜ต์…˜ ์ข…์†์„ฑ : [email protected]์— ์ง€์›๋˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ : { "os": "linux", "arch": "x64"}๋ฅผ ์›ํ•จ (ํ˜„์žฌ : { "os": "darwin", "์•„์น˜": "x64"})

 + [email protected]
 1.1 ์ดˆ์— 2 ๊ฐœ์˜ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  4 ๊ฐœ์˜ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
 0 ๊ฐœ์˜ ์ทจ์•ฝ์  ๋ฐœ๊ฒฌ

 [email protected] / private / tmp / d
 โ””โ”€โ”ฌ [email protected]
 โ”œโ”€โ”€ [email protected]
 โ”œโ”€โ”€ ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์„ ํƒ์  ์ข…์†์„ฑ [email protected]
 โ””โ”€โ”€ ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์„ ํƒ์  ์ข…์†์„ฑ [email protected]

 npm WARN ์„ค์น˜ ์ „์— ๊ธฐ์กด node_modules / ์ œ๊ฑฐ ์ค€๋น„

 > [email protected] ์„ค์น˜ ํ›„ / private / tmp / d / node_modules / oax
 > ๋…ธ๋“œ ./postinstall.js

 0.722s์— 3 ๊ฐœ์˜ ํŒจํ‚ค์ง€ ์ถ”๊ฐ€
 [email protected] / private / tmp / d
 โ””โ”€โ”ฌ [email protected]
 โ”œโ”€โ”€ [email protected]
 โ”œโ”€โ”€ [email protected]
 โ””โ”€โ”€ ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์„ ํƒ์  ์ข…์†์„ฑ [email protected]

์–ด๋””

  • ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ

์–ด๋–ป๊ฒŒ

ํ˜„์žฌ ํ–‰๋™

ํ˜„์žฌ๋Š” package.json์˜ os ๋ฐ arch ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„ ํƒ์  ์ข…์†์„ฑ์— ๋Œ€ํ•ด npm ci๊ฐ€ ์†์ƒ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

$ npm init -y; npm i [email protected]; npm ls; npm ci; npm ls

npm i ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๊ณ  oax์— ๋Œ€ํ•œ ๋‹จ์ผ ์„ ํƒ์  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ npm ci ๊ฐ€ ์ž˜๋ชป ์ž‘๋™ํ•˜๊ณ  oax์— ๋Œ€ํ•œ ์„ ํƒ์  ์ข…์†์„ฑ ์ค‘ ๋‘ ๊ฐœ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์„ ํƒ์  ์ข…์†์„ฑ์ด ์„œ๋กœ ๋‹ค๋ฅธ ์šด์˜ ์ฒด์ œ ๋ฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์„ค์น˜๋œ ์„ ํƒ์  ์ข…์†์„ฑ.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

darwin์—์„œ ์‹คํ–‰ํ•  ๋•Œ๋Š” oax-darwin์„ ์„ค์น˜ํ•ด์•ผํ•˜๊ณ , Linux์—์„œ ์‹คํ–‰ํ•  ๋•Œ๋Š” oax-linux๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

WHO

  • ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ

์ฐธ๊ณ  ๋ฌธํ—Œ

  • ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ฒ„๊ทธ๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Windows์˜ ๋นŒ๋“œ ์„œ๋ฒ„์—์„œ "npm ci"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  32 ๋Œ“๊ธ€

๋‹ค๋ฅธ ๋ฒ„์ „์˜ fsevents์— ์˜์กดํ•˜๋Š” ๋‘ ๊ฐœ์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ Windows์—์„œ fsevents์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

npm install chokidar --save

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ [email protected]
added 14 packages from 17 contributors and audited 19 packages in 1.668s
found 0 vulnerabilities

npm install webpack --save-dev

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\watchpack\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ [email protected]
added 327 packages from 195 contributors and audited 4246 packages in 16.581s

์ตœ์‹  ์›นํŒฉ์€ ์ด์ „ [email protected] ์— ์˜์กดํ•˜๋Š” ์ด์ „ watchpack ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค .

chokidar ์ตœ์‹ ๊ฐ€์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ [email protected]

๊ทธ๋Ÿฌ๋‚˜ npm ์„ค์น˜๋Š” OS์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฒ„์ „์˜ fsevent๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฑด๋„ˆ ๋›ฐ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜:

 npm ci
npm WARN prepare removing existing node_modules/ before installation

> [email protected] install K:\SWS\test\node_modules\watchpack\node_modules\fsevents
> node-gyp rebuild


K:\SWS\test\node_modules\watchpack\node_modules\fsevents>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
Traceback (most recent call last):
  File "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 50, in <module>
    sys.exit(gyp.script_main())
  File "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 554, in script_main
    return main(sys.argv[1:])
  File "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 547, in main
    return gyp_main(args)
  File "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 532, in gyp_main
    generator.GenerateOutput(flat_list, targets, data, params)
  File "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 2033, in GenerateOutput
    root_entries = _GatherSolutionFolders(
  File "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1791, in _GatherSolutionFolders
    return _DictsToFolders('', root, flat)
  File "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1744, in _DictsToFolders
    for folder, contents in bucket.items():
AttributeError: 'MSVSProject' object has no attribute 'items'
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:351:16)
gyp ERR! stack     at ChildProcess.emit (events.js:210:5)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)
gyp ERR! System Windows_NT 10.0.17134
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd K:\SWS\test\node_modules\watchpack\node_modules\fsevents
gyp ERR! node -v v12.14.0
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok
added 275 packages in 9.344s

๊ทธ๋ฆฌ๊ณ  node_modules๋ฅผ ๋ณด๋ฉด fsevents๊ฐ€ ์žˆ๊ณ  ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ npm ci --no-optional ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. https://github.com/npm/cli/issues/637 ์—๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค.

Node 12 LTS ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. npm -v => 6.13.4

npm ci --no-optional ์ž‘๋™ ์—ฌ๋ถ€๋Š” ์ถ”๊ฐ€ ์š”์ธ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/npm/cli/issues/637#issuecomment -570813804 ์ฐธ์กฐ

๋”ฐ๋ผ์„œ npm ci ์ด ๋‚ด ํ™˜๊ฒฝ์—์„œ ์‹คํŒจํ•˜๋Š” ๋™์•ˆ npm ci --no-optional ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํ™˜๊ฒฝ :

  • ์œˆ๋„์šฐ 10
  • Nodejs 12.13.1
  • npm 6.13.4

์ตœ์‹  ๋…ธ๋“œ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ ํ›„ npm์€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. fsevent ์ธ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋Š” fsevents๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— npm ci ๋กœ ์„ค์น˜ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

  • Windows 10 Pro 1909
  • ๋…ธ๋“œ 12.14.1
  • npm 6.13.6

์ตœ์‹  ๋…ธ๋“œ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ ํ›„ npm์€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. fsevent ์ธ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋Š” fsevents๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— npm ci ๋กœ ์„ค์น˜ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

* Windows 10 Pro 1909

* node 12.14.1

* npm 6.13.6

@padinko ์ถ”๊ฐ€ --no-optional ํ”Œ๋ž˜๊ทธ (์˜ˆ : npm ci --no-optional ๋ณ€ํ˜•์„ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ? ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ตœ์‹  ๋…ธ๋“œ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ ํ›„ npm์€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. fsevent ์ธ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋Š” fsevents๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— npm ci ๋กœ ์„ค์น˜ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

* Windows 10 Pro 1909

* node 12.14.1

* npm 6.13.6

@padinko ์ถ”๊ฐ€ --no-optional ํ”Œ๋ž˜๊ทธ (์˜ˆ : npm ci --no-optional ๋ณ€ํ˜•์„ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ? ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŒจํ‚ค์ง€์—์„œ npm ci ์‹คํŒจ :

\node_modules\watchpack\node_modules\fsevents
\node_modules\webpack-dev-server\node_modules\fsevents
\node_modules\jest-haste-map\node_modules\fsevents

npm ci --no-optional ์—๋Š” 2 ๊ฐœ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

\node_modules\webpack-dev-server\node_modules\fsevents
\node_modules\jest-haste-map\node_modules\fsevents

๊ทธ๋ž˜์„œ ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ fsevents๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

@paulmillr @pipobscure ๋‚ด ๋ฌธ์ œ (# 658)๋Š”์ด ํ‹ฐ์ผ“์˜ ์ค‘๋ณต์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ ค๋ฉด์ด ํ•ญ๋ชฉ์„ ์ถ”์ ํ•˜์‹ญ์‹œ์˜ค.

Ubuntu์—์„œ๋„์ด ๋ฒ„๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. npm ci ๋Š” MacOS์—๋งŒ ์„ค์น˜ํ•ด์•ผํ•˜๋Š” fsevents ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

@mikemimik ๋˜๋Š” @isaacs ,์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ, fsevents ๋Š” ์ด๊ฒƒ์ด ์ด์ œ ๋” ํฐ ๋ฌธ์ œ์ธ ์ด์œ ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ NPM์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ํ•ด๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ fsevents๊ฐ€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ์ž๋ฆฌ์— ๋นŒ๋“œํ•˜๋Š” ๋Œ€์‹  ๊ฐ€์ ธ ์˜ค๊ธฐ ์œ„ํ•ด node-pre-gyp์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์˜ค๋ฅ˜์—†์ด ์ข…๋ฃŒ๋˜๋Š” postinstall ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. npm ci ์€ (๋Š”) ํ”Œ๋žซํผ ์ง€์› ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์ž ๊ธˆ ํŒŒ์ผ์—์žˆ๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋ ˆ์ด์•„์›ƒํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํŒจํ•œ ์„ ํƒ์  dep ๋งŒ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ์ด dep๋ฅผ ์„ค์น˜ํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

npm v7์—๋Š”์ด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. (์ง€๊ธˆ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ฝ”๋“œ์—์„œ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.) npm v6์—์„œ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๊ด€์—ฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ "์—…๊ทธ๋ ˆ์ด๋“œ"๋กœ ๋๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. v7๋กœ ์ˆ˜์ • ". ๊ทธ๋™์•ˆ ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด npm ci ๋Œ€์‹  npm install ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ, fsevents ์˜ ์ „์ˆ ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ๊ทธ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Windows์— ์„ค์น˜ํ•˜๋ฉด 404๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๊ฑด๋„ˆ ๋œ๋‹ˆ๋‹ค. ์ด์ œ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ•œ ๋‹ค์Œ ๋นŒ๋“œ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ด€๊ณ„์—†์ด : npm ci ์€ CI ํ™˜๊ฒฝ ์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  npm i ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? CI์—์„œ ์—„๊ฒฉํ•œ ํŒจํ‚ค์ง€ ์ž ๊ธˆ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ : npm@7 ๊ฐ€ LTS ์ด์ „์— ๋…ธ๋“œ 14์— ์ฐฉ๋ฅ™ํ• ๊นŒ์š”? LTS ํŠธ๋ž™์—์„œ 1 ๋…„ ๋™์•ˆ npm i ๋˜๋Š” ๋ฒ„์ „ ์ž ๊ธˆ์— ๊ฐ‡ํ˜€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ?

์ „์ˆ ์„ ๋ฐ”๊ฟ”์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›๋ž˜ ์‚ฌ์šฉํ–ˆ๋˜ S3์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์žƒ์—ˆ๊ณ  ์ ์  ๋” ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค์‹œ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ NAPI ๊ธฐ๋ฐ˜ v2.x๋Š” ๋…ธ๋“œ v8.x +์— ๋Œ€ํ•ด ์ „ํ˜€ ๋นŒ๋“œ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ•œ ๋‹ค์Œ ๋นŒ๋“œ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์˜ค, ์ด์ƒํ•˜๋„ค์š”. npm ci ๊ฐ€ ์„ ํƒ์  dep์˜ ๋นŒ๋“œ ์‹คํŒจ๋ฅผ ์น˜๋ช…์ ์ด์ง€ ์•Š์€ ๊ฒฝ๊ณ  ์œ ํ˜• ์ด๋ฒคํŠธ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€๋˜๋Š” dep๋ฅผ ์ œ๊ฑฐ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ด€๊ณ„์—†์ด : npm ci๋Š” CI ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์™œ ๋Œ€์‹  npm i๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? CI์—์„œ ์—„๊ฒฉํ•œ ํŒจํ‚ค์ง€ ์ž ๊ธˆ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์งˆ๋ฌธ.

"CI ํ™˜๊ฒฝ ์šฉ์œผ๋กœ ์„ค๊ณ„๋จ"์ด ํ•ญ์ƒ "์ด ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด์ด ํŠน์ • CI ํ™˜๊ฒฝ์— ๊ฐ€์žฅ ์ ํ•ฉ ํ•จ"์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ npm ci๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ ํƒ์  deps์— ๋Œ€ํ•œ ๋นŒ๋“œ ์‹คํŒจ๋ฅผ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • os / cpu ์ œํ•œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ deps๋ฅผ ์‚ฌ์ „ ํ•„ํ„ฐ๋ง ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. _only_ ์ •๋ณด๊ฐ€ ์ถ”์ ๋˜์ง€ ์•Š๋Š” package-lock.json์„ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (์ฆ‰,์ด ์‹คํŒจ๋ฅผ ์ ์ ˆํžˆ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ ๋œ ์œ ์ผํ•œ ํŒŒ์ผ์„ ํฌํ•จํ•˜์—ฌ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ฝ๊ธฐ๋ฅผ ๊ฑด๋„ˆ ๋›ฐ๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.)

๊ทธ๋ž˜์„œ, ๋‹น์‹ ์€ ์‚ฌ์šฉํ•ด์•ผ npm i ๋ณด๋‹ค๋Š” npm ci ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”ผ๋ฅผ ๋ชจ๋‘ ๋ฒ„๊ทธ.

CI์—์„œ ์—„๊ฒฉํ•œ ํŒจํ‚ค์ง€ ์ž ๊ธˆ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ์ž ๊ธˆ์ด ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ๋ฌด๊ฒฐ์„ฑ ๋ฐ ํ•ด๊ฒฐ ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ข‹์€ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. npm install ๋„ ๊ทธ๋ ‡๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

package-lock ๋ฐ package.json์ด ์„œ๋กœ ๋™๊ธฐํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒฝ์šฐ package.json์— "scripts": { "prepare": "npx lock-verify" } ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm @ 7 ์ด LTS๊ฐ€๋˜๊ธฐ ์ „์— ๋…ธ๋“œ 14์— ๋„์ฐฉํ• ๊นŒ์š”?

๊ทธ๊ฒƒ์ด ์ œ ๊ธฐ๋Œ€์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ LTS ์ธ ๊ฒฝ์šฐ์—๋„ LTS ๋ฒ„์ „์˜ ๋…ธ๋“œ์—์„œ LTS ๋ฒ„์ „์˜ npm์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด LTS "๊ณ ์ • ๋œ"์‹œ๊ฐ„ ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋”๋ผ๋„ ๊ณผ๊ฑฐ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ npm v6์„ 4 ๊ฐœ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๋…„์€ Node๊ฐ€ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ๋‚˜์œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  npm์€ ๋Ÿฐํƒ€์ž„์— ์˜ํ–ฅ์„์ฃผ๋Š” ๋ฐฉ์‹์˜ "์ข…์†์„ฑ"์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ๋Š” ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

npm v7์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ (๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ™”ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ) ์ œ ์‹œ๊ฐ„์— ๊ฐ€์ ธ ์˜ค์ง€ ๋ชปํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ์–‘๋ณด๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ 14 LTS์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” npm v7์ด npm v6์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๋„๋ก ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

์•„, ๋ฐฉ๊ธˆ ๋…ธ๋“œ ์ผ์ • ์„ ํ™•์ธํ•œ ๊ฒฐ๊ณผ ์‹œ๊ฐ„์ด ํ–ˆ์Šต๋‹ˆ๋‹ค . Node 14์˜ _initial_ ๋ฆด๋ฆฌ์Šค๋Š” 3 ๊ฐœ์›” ๋‚ด์— ์žˆ์ง€๋งŒ 10 ์›”๊นŒ์ง€ LTS๋กœ ์ „ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช…ํ™•ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. npm v7์˜ ์ดˆ๊ธฐ ๋ฆด๋ฆฌ์Šค๋Š” ๋…ธ๋“œ 14์— ๋งž์ถฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  v14๊ฐ€ LTS์— ๋„๋‹ฌ ํ•  ๋•Œ๊นŒ์ง€ ์ถฉ๋ถ„ํžˆ ์•ˆ์ •์  ์ผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. (์œ ๋ช…ํ•œ ๋งˆ์ง€๋ง‰ ๋ง๊ณผ ๋ชจ๋“  ๊ฒƒ์ด์ง€๋งŒ ํ†ตํ•ฉ์— ๊ฐ€๊นŒ์›Œ์ง์— ๋”ฐ๋ผ ์ž์‹ ๊ฐ์ด ๊พธ์ค€ํžˆ ๋†’์•„์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ณง ๋ฐ”๋€” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.)

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ฒ„๊ทธ๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Windows์˜ ๋นŒ๋“œ ์„œ๋ฒ„์—์„œ "npm ci"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

Windows๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ด๋–ค ์‹œ์Šคํ…œ์—์„œ๋„ npm ci๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ์ž ๊ธˆ์ด ๊ถŒ์œ„์žˆ๋Š” ๋ฌด๊ฒฐ์„ฑ ๋ฐ ํ•ด์ƒ๋„ ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ข‹์€ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. npm install ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ž ๊น๋งŒ ์š” .. package.json ํŒŒ์ผ์— ์„ค์ •๋œ ๊ทœ์น™์„ ๊ณ„์† ์ค€์ˆ˜ํ•˜๋Š” ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ npm install ๊ฐ€ ์ž ์žฌ์ ์œผ๋กœ package-lock.json ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ์ œ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด @isaacs๋ฅผ ๋ณ€๊ฒฝ

@tommck ๋‚˜๋Š”

package-lock ๋ฐ package.json์ด ์„œ๋กœ ๋™๊ธฐํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒฝ์šฐ package.json์— "scripts": { "prepare": "npx lock-verify" } ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CI ํ™˜๊ฒฝ์—์„œ npm ci ์˜ ๊ฐ€๋‚œํ•œ ์‚ฌ๋žŒ์˜ ๊ตฌํ˜„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. npm install . ํŒจํ‚ค์ง€ ์ž ๊ธˆ์ด ์—ฌ์ „ํžˆ package.json๊ณผ ๋™๊ธฐํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ค€๋น„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐฉ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉด ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๊ฒƒ์ด ์ง์ ‘ ์ข…์†์„ฑ์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๊ฐ„์ ‘ ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๋นŒ๋“œ์— ์ตœ์‹  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • lock-verify๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๋ฉด ๊ฐ‘์ž๊ธฐ ์‹คํŒจํ•œ ๋นŒ๋“œ๋ฅผ ์–ป๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ๋œ package-lock.json์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ณ  ์ปค๋ฐ‹ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ข…์†์„ฑ์ด ํ•ด์ œ ๋  ๋•Œ ์‹คํŒจํ•˜์ง€ ์•Š๊ณ  ๋‚ด ๋นŒ๋“œ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์šด ์ข‹๊ฒŒ๋„ ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” Linux๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ํŒจํ‚ค์ง€ ์กฐํ•ฉ์—์„œ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์šด์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@coyoteecd ๊ทธ๋ž˜์„œ ... ์ž ๊ธˆ ํŒŒ์ผ์ด

"npm install"์„ ์‹คํ–‰ํ•˜๋ฉด ์—ฌ์ „ํžˆ ์ƒˆ ์ข…์†์„ฑ์œผ๋กœ ํŒจํ‚ค์ง€ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ‹€ ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ธ์ˆ˜์—†์ด npm install ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์—์žˆ๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์ข…์†์„ฑ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

npm install ์ด (๊ฐ€) npm ci ๊ฐ€ _ํ•˜์ง€ _ ์•Š๋Š” _ํ•˜๋Š” ์ผ์€ node_modules ์žˆ๊ณ  ์ด๋ฏธ ์ž ๊ธˆ ํŒŒ์ผ์—์žˆ๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ข…์†์„ฑ์„ _skip_ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž ๊น๋งŒ ์š” .. npm ์„ค์น˜๋กœ ์ธํ•ด package.json ํŒŒ์ผ์— ์„ค์ •๋œ ๊ทœ์น™์„ ๊ณ„์† ์ค€์ˆ˜ํ•˜๋Š” ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ ์ž ์žฌ์ ์œผ๋กœ package-lock.json ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ์€ ๋‚ด ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด @isaacs๋ฅผ ๋ณ€๊ฒฝ

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ๋ณด๊ณ  ์‹ถ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์„ ์กด์ค‘ํ•˜์ง€ ๋ง๋ผ๊ณ  ๋ช…์‹œ ์ ์œผ๋กœ ์ง€์‹œํ•˜๊ฑฐ๋‚˜ npm update ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ž ๊ธˆ ํŒŒ์ผ์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ (์ฆ‰, deps๊ฐ€ ์ •์˜ํ•œ ํŠธ๋ฆฌ์—์„œ ์ข…์†์„ฑ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์Œ) ์ž ๊ธˆ ํŒŒ์ผ์€ npm install npm v5์— ๋„์ž… ๋œ ์ดํ›„๋กœ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

full-icu ํŒจํ‚ค์ง€๋Š” ๊ฐ€๋” ์ž ๊ธˆ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ npm์ด ์•„๋‹Œ ๊ทธ๋“ค์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ฒฝํ—˜ : ๋…ธ๋“œ v12๊ฐ€ ์žˆ๊ณ  ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ v10, ๋…ธ๋“œ v10์— ๋Œ€ํ•œ ์ „์ฒด icu ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ icu ๋ฐ์ดํ„ฐ ํŒจํ‚ค์ง€๊ฐ€์žˆ์„ ๋•Œ ..

๋ชจ๋“  ๊ฒƒ์„ ์ž ๊ทธ๊ณ  node_modules ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€์—†๋Š” ์ƒํƒœ์—์„œ npm i ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์—์„œ icu ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋˜๋ฏ€๋กœ npm i ๋‘ ๋ฒˆ ์‹คํ–‰ํ•˜์—ฌ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ ๋•Œ๋ฌธ์— npm ci๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

fsevents ๋กœ ์ธํ•ด ์—ฌ๊ธฐ์— ๋„์ฐฉํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฌธ์ œ์˜ npm ci ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

https://github.com/fsevents/fsevents/issues/301#issuecomment -572607085

@jayoungers FWIW, ๊ทธ ์†”๋ฃจ์…˜์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋“  ๋‹ค๋ฅธ ๋ฒ„์ „์˜ fsevents๊ฐ€ ์—ฌ์ „ํžˆ npm ci ๋นŒ๋“œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  npm i ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ์ด ๋ฒ„๊ทธ์˜ ์˜ํ–ฅ์„๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋„์›€์ด๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ Linux์—์„œ package-lock.json ๊ฐ€ ์ด๋ฏธ ์ƒ์„ฑ ๋œ ํŒจํ‚ค์ง€ (์ œ ๊ฒฝ์šฐ์—๋Š” WSL)์—์„œ npm install ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. package-lock.json ์‚ญ์ œํ•˜๊ณ  Windows์—์„œ npm install ์„ ๋‹ค์‹œ ์‹คํ–‰ ํ•œ ํ›„ ๊ดœ์ฐฎ ์•˜์Šต๋‹ˆ๋‹ค.

Serverless Pro CI๊ฐ€ npm ์„ค์น˜์—์„œ npm ci๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ์ด ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ•˜์—ฌ ๋นŒ๋“œ๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
Windows ์‹œ์Šคํ…œ์—์„œ ์ปค๋ฐ‹ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

build step: npm ci

> [email protected] postinstall /nuxt-serverless/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> [email protected] postinstall /nuxt-serverless/node_modules/ejs
> node ./postinstall.js


> [email protected] install /nuxt-serverless/node_modules/watchpack/node_modules/fsevents
> node-gyp rebuild

gyp
 ERR! build error 
gyp
 ERR! stack Error: not found: make
gyp ERR! stack     at getNotFoundError (/root/.nvm/versions/node/v10.13.0/lib/node_modules/npm/node_modules/which/which.js:13:12)
gyp
 ERR! stack     at F (/root/.nvm/versions/node/v10.13.0/lib/node_modules/npm/node_modules/which/which.js:68:19)
gyp ERR! stack
     at E (/root/.nvm/versions/node/v10.13.0/lib/node_modules/npm/node_modules/which/which.js:80:29)
gyp ERR! stack     at /root/.nvm/versions/node/v10.13.0/lib/node_modules/npm/node_modules/which/which.js:89:16
gyp ERR! 
stack     at /root/.nvm/versions/node/v10.13.0/lib/node_modules/npm/node_modules/isexe/index.js:42:5
gyp ERR! stack     at /root/.nvm/versions/node/v10.13.0/lib/node_modules/npm/node_modules/isexe/mode.js:8:5
gyp 
ERR! stack     at FSReqWrap.oncomplete (fs.js:154:21)
gyp ERR! 
System Linux 4.14.171-105.231.amzn1.x86_64
gyp ERR! command "/root/.nvm/versions/node/v10.13.0/bin/node" "/root/.nvm/versions/node/v10.13.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /nuxt-serverless/node_modules/watchpack/node_modules/fsevents
gyp ERR!
 node -v v10.13.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 

npm install --no-optional ์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ˆœ๊ฐ„์€ package-lock.json ์—์„œ ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

"moment": {
      "version": "2.29.1",
      "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
      "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
      "dev": true,
      "optional": true
 }

node_modules npm i ์—์„œ ์ˆœ๊ฐ„์„ ์ œ๊ฑฐํ•˜๋ฉด ๋‹ค์‹œ ๋„ฃ์Šต๋‹ˆ๋‹ค.

rm -rf node_modules/moment
npm install --no-optional

ls node_modules | grep moment 
moment

@Elijen ๋‚˜๋Š” ์ด๊ฒƒ์ด ํŒจํ‚ค์ง€์˜ OS ๋Œ€์ƒ์ธ์ด ์Šค๋ ˆ๋“œ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€์—†๋Š” ๊ฒฝ์šฐ ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„, ๊ทธ๋Ÿฐ๋ฐ fsevents ๋Š” 5 ์›” 5 ์ผ ์ดํ›„๋กœ ๋” ์ด์ƒ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
https://github.com/fsevents/fsevents/issues/301

@isaacs ์ด ๋•…์ด npm@7 ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

@paulirwin ์•„๋งˆ๋„ ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์–ธ๊ธ‰ ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž‘์„ฑ๋œ ์—ฌ๋Ÿฌ ๋ฌธ์ œ์™€ ํฌ๋Ÿผ ๊ฒŒ์‹œ๋ฌผ์„ ๋ณด์•˜๊ณ ์ด ๋ฌธ์ œ๋กœ ์ธํ•œ ๋‹ค์šด ์ŠคํŠธ๋ฆผ ๋ฌธ์ œ๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ๋ณด๊ณ  ์‹ถ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์„ ์กด์ค‘ํ•˜์ง€ ๋ง๋ผ๊ณ  ๋ช…์‹œ ์ ์œผ๋กœ ์ง€์‹œํ•˜๊ฑฐ๋‚˜ npm update ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ž ๊ธˆ ํŒŒ์ผ์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ (์ฆ‰, deps๊ฐ€ ์ •์˜ํ•œ ํŠธ๋ฆฌ์—์„œ ์ข…์†์„ฑ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์Œ) ์ž ๊ธˆ ํŒŒ์ผ์€ npm install npm v5์— ๋„์ž… ๋œ ์ดํ›„๋กœ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๋ฒ„์ „์ด ํƒœ๊ทธ๋กœ ์ง€์ • ๋  ๋•Œ v6.14.8์—์„œ ์œ ํšจํ•œ ์ž ๊ธˆ ํŒŒ์ผ๋กœ npm install ์—…๋ฐ์ดํŠธ ์ข…์†์„ฑ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. # 2167๋กœ ๊ธฐ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹์€ v7.0.10์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. : +1 :

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰