iT邦幫忙

1

npm build 問題

我用npm run build去 build 網友寫的程式時
出現以下錯誤

> node build/build.js

internal/modules/cjs/loader.js:960
  throw err;
  ^

Error: Cannot find module 'chalk'

我自以為是地npm install chalk
然後再次npm run build就可以了

想請教兩點:
1.npm install chalk這樣做是正確的嗎?
2.這裡的install是install到什麼目錄?因為我每次更新程式都是重新 clone project,每次都得要重新 install chalk (還是我不該使用 clone, 該用 pull?)

GitHub project 是 listennn08大大寫的前端

dragonH iT邦超人 5 級 ‧ 2020-05-20 09:50:49 檢舉
project 用到的 lib 理論上都會寫到 package.json 裡

只要是用 npm install 裝的

基本上都會

所以你只要 clone 他的 project

再下 npm install 就好

他會幫你裝所有紀錄在 package.json 的 lib

1.

可以

但是只裝了 chalk

你有可能還缺其他東西

2.
lib 都放在 node_modules 裡

純更新 code

例如 github 有更新 code (沒裝新的 lib)

那就只需要 git pull 就好

如果有用新的 lib

那就在補上 npm install 就好
感謝回答

1 個回答

9
丹尼爾胡
iT邦新手 4 級 ‧ 2020-05-20 09:38:55
最佳解答

npm install <module>時npm會做三件事:

  1. 把你所安裝的module名稱及版本寫進package.json
  2. 把更詳細的資訊(module名稱、版本、dependency、module url等)寫進package-lock.json
  3. node_modules/資料夾中將所安裝的module放進去

所以進行npm install chalk是正確的,best practice是判斷這個module和你要build的專案的dependency決定要不要用npm install chalk --savenpm install chalk --save-dev(Ref)

關於第二個問題,這要根據原來的Git repository有沒有把所缺的module補上去。通常Git repo都會把node_modules/寫進.gitignore中,意味著不會把所有的modules上傳到Repo中。這就是為什麼每次我們要開發時將專案clone下來時需要npm installnpm run start/build才不會跳錯誤訊息。而npm install在做的事情就是根據專案的package.jsonpackage-lock.json來尋找modules並安裝進node_modules/中。

所以很有可能是這個專案本身缺了chalk module,根治的方法是:需要在你本地端npm install chalk之後,把你的commit push回遠端,接著發一個Pull Request給原作者,當他merge了之後,未來不論是git pull or clone應該都能避免這個問題。

若是暫時性的需要解決這個問題,沒錯,用pull (best practice是git fetch && git merge,比較不傷害你的本地專案 -> Ref),原因是clone時把一切都重啟了,pull/fetch-merge時則是根據進來的檔案和你現有的檔案之不同來決定更新哪些東西。

大大好久不見

感謝您如此詳細的回答

/images/emoticon/emoticon41.gif

好久不見啊海綿寶寶大大:)

我要發表回答

立即登入回答