解決問題
npm安裝electron報錯一般來說是鏡像源的問題。
electron的鏡像源與一般的 vue 之類的鏡像源地址不一樣需要單獨配置。
npm讀取的全局配置一般是在
C:\Users\{用戶}\.npmrc
這個配置文件中。
如果你找不到你的配置文件可以執行如下命令,
# 執行后會直接用txt打開你的配置文件 進行修改保存即可
npm config edit
cache=D:\Develop\nodeJs\node_cache
prefix=D:\Develop\nodeJs\node_global
registry=https://registry.npmmirror.com/
electron_mirror=https://npm.taobao.org/mirrors/electron/
上面是我原來的配置文件,由于淘寶的鏡像源地址換了,從原來的
https://npm.taobao.org/ 換到了現在的
https://registry.npmmirror.com/ 導致原來可以下載現在不能下載。
因此只需要將上述配置修改成這樣即可
registry=https://registry.npmmirror.com/
electron_mirror=https://cdn.npmmirror.com/binaries/electron/
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
然后 刪除node_modules
文件夾,并執行下面命令清除緩存
npm cache clean --force
知識補充
- npm 命令補充
# 查看配置 也就是 .npmrc 中的配置
npm config list
# 查看配置中的某個值
npm get [key]
# 例如查看依賴源地址 這些key 就是.npmrc中的key
npm get registry
需要注意的是 npm 讀取.npmrc
是有優先級的
如果在項目中也存在.npmrc
文件 npm 會優先讀取 項目中的配置。如果某個key在項目中的.npmrc
找不到才會去讀取全局的 .npmrc
所以項目希望有一些自己獨有的配置時 可以在項目中放上自己的.npmrc
2. .npmrc
中值是什么意思
# npm緩存依賴包的目錄
cache=D:\Develop\nodeJs\node_cache
# npm全局安裝的目錄
prefix=D:\Develop\nodeJs\node_global
# 定義npm的registry,即npm的包下載源
registry=http://registry.npmjs.org/
# 定義npm的代理服務器,用于訪問網絡
proxy=http://proxy.example.com:8080/
# 定義npm的https代理服務器,用于訪問網絡
https-proxy=http://proxy.example.com:8080/
# 是否在SSL證書驗證錯誤時退出
strict-ssl=true
# 定義自定義CA證書文件的路徑
cafile=/path/to/cafile.pem
# 自定義請求頭中的User-Agent
user-agent=npm/{npm-version} node/{node-version} {platform}
# 安裝包時是否自動保存到package.json的dependencies中
save=true
# 安裝包時是否自動保存到package.json的devDependencies中
save-dev=true
# 安裝包時是否精確保存版本號
save-exact=true
# 是否在安裝時檢查依賴的node和npm版本是否符合要求
engine-strict=true
# 是否在運行腳本時自動將node的路徑添加到PATH環境變量中
scripts-prepend-node-path=true
- npm 依賴包緩存機制
npm install 之后會在項目中生成 package-lock.json
文件。該文件是用來鎖定版本使用的,其中每個依賴下面都有一個integrity
這是一個hash值,通過hash算法生成出來的一個包的摘要。
然后npm會去D:\Develop\nodeJs\node_cache
緩存目錄下找 是否已經下載過依賴,
如果下載過則 直接從緩存中解壓出來,否則就去下載,并更新package-lock.json
和緩存
如下
"node_modules/@babel/parser": {"version": "7.27.7","resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.7.tgz","integrity": "sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==","dependencies": {"@babel/types": "^7.27.7"},"bin": {"parser": "bin/babel-parser.js"},"engines": {"node": ">=6.0.0"}},
所以有時擔心緩存問題的時候 可以刪除 package-lock.json
npm就會根據 package.json
去下載了。
還有package.json
的優先級大于package-lock.json