国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

這篇具有很好參考價(jià)值的文章主要介紹了macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

記錄macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

寫在前面:該問題僅僅出現(xiàn)在Linux和macOS上,Windows上不存在該問題!

初始背景

最近筆者重新拾起了Electron,把最新版Electron的官方文檔閱讀了一遍。眾所周知,Electron作為依賴在安裝的時(shí)候,其二進(jìn)制文件下載在國內(nèi)一直以來都是問題(因?yàn)槟J(rèn)會(huì)從github上下載),好在現(xiàn)在Electron的官方文檔已經(jīng)寫的非常詳細(xì)了:安裝指導(dǎo) | Electron (electronjs.org),只需要配置一個(gè)鏡像地址到.npmrc中:

ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"

記住這個(gè)大寫的Key

筆者由于是新的機(jī)器,還沒有配置改值,所以找到.npmrc文件的配置了上述的鏡像后,便開開心心的準(zhǔn)備進(jìn)行項(xiàng)目搭建了。

問題出現(xiàn)

然而,當(dāng)筆者準(zhǔn)備使用yarn執(zhí)行如下命令的時(shí)候,卻出了問題:

yarn add -D electron

運(yùn)行啟動(dòng)以后,在Electron安裝的環(huán)境一直卡住了很久很久。

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

咦,難道鏡像配置寫錯(cuò)了嗎?仔細(xì)對(duì)比以后,沒有問題。難道因?yàn)槲业木W(wǎng)絡(luò)訪問很慢嗎?等到訪問超時(shí)以后,發(fā)現(xiàn)一個(gè)IP地址超時(shí)了,心想國內(nèi)鏡像再怎么也不應(yīng)該超時(shí),盲猜鏡像地址沒有生效。于是乎,準(zhǔn)備嘗試對(duì)下載Electron二進(jìn)制文件的過程進(jìn)行debug。

問題排查

首先定位到node_module/electron包,能夠看到有一段安裝后腳本執(zhí)行命令(postinstall):

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

關(guān)于postinstall的詳細(xì)說明:scripts | npm Docs (npmjs.com)

也就是說,node_module/electron本身npm包install完成以后,還會(huì)執(zhí)行其包內(nèi)的install.js。

定位進(jìn)入了node_module/electron包下的install.js,該腳本內(nèi)部主要邏輯是先檢查Electron的二進(jìn)制緩存,如果不存在緩存,則使用來自@electron/get包中提供的downloadArtifact方法從遠(yuǎn)端下載Electron二進(jìn)制制品文件。

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

我們暫時(shí)先不看緩存讀寫的邏輯,著重了解遠(yuǎn)端下載的邏輯,所以我們進(jìn)入@electron/get包中的downloadArtifact

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

查看@electron/get包下的index.js內(nèi)容:

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

前面我們提到,懷疑鏡像地址沒有生效導(dǎo)致下載超時(shí),所以我們重點(diǎn)關(guān)注一下這里通過getArtifactRemoteURL方法得到的url值,

由于每一次這個(gè)包都會(huì)重新安裝,我們不太好調(diào)試這個(gè)值,所以,我們做一個(gè)簡(jiǎn)單的trick:

  1. 找到這個(gè)包的緩存(macOS上的路徑為:~/Library/Caches/Yarn/v6/npm-@electron-get-xxxx):

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

  1. 找到上述indexjs代碼,并添加一段日志打印:

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

  1. 準(zhǔn)備完畢以后,我們重新在demo項(xiàng)目下執(zhí)行yarn add -D electron。執(zhí)行以后,等到超時(shí)以后,發(fā)現(xiàn)控制臺(tái)日志打印如下:

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

Why?。繛槭裁催@個(gè)下載的Electron二進(jìn)制文件地址依然是github的?于是,我們有必要進(jìn)一步查看這個(gè)URL是如何得到。

繼續(xù)查看代碼,這個(gè)url來源于artifact-utils中的getArtifactRemoteURL方法,而這個(gè)方法里面關(guān)于最終返回的url最重要的部分是下圖所示的base的值:

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

而這個(gè)base值來源于mirrorVar這個(gè)方法:

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

根據(jù)上面代碼的邏輯,name值為"mirror",options未使用,defaultValue為:

"https://github.com/electron/electron/releases/download/"

也就是說,在后面的邏輯中,如果沒有從process.env中找到對(duì)應(yīng)的值,那么就會(huì)使用默認(rèn)的github官方制品地址的值。按照代碼邏輯,運(yùn)行到這個(gè)方法的時(shí)候,會(huì)從process.env中嘗試獲?。?/p>

  1. "NPM_CONFIG_ELECTRON_MIRROR"
  2. "npm_config_electron_mirror"
  3. "npm_package_config_electron_mirror"
  4. "ELECTRON_MIRROR"

環(huán)境變量—— 配置 | npm 中文網(wǎng) (nodejs.cn)

任何以 npm_config_ 開頭的環(huán)境變量都將被解釋為配置參數(shù)。 例如,將 npm_config_foo=bar 放入您的環(huán)境中會(huì)將 foo 配置參數(shù)設(shè)置為 bar。 任何未賦值的環(huán)境配置都將被賦值為 true。 配置值不區(qū)分大小寫,因此 NPM_CONFIG_FOO=bar 的工作方式相同。 但是,請(qǐng)注意,在 scripts 內(nèi)部,npm 將設(shè)置自己的環(huán)境變量,并且 Node 會(huì)更喜歡那些小寫版本,而不是您可能設(shè)置的任何大寫版本。 詳情見此問題。

請(qǐng)注意,您需要使用下劃線而不是破折號(hào),因此 --allow-same-version 將變?yōu)?npm_config_allow_same_version=true。

此外,如果是配置在npmrc里面的配置,也會(huì)在npm/yarn啟動(dòng)的時(shí)候被作為環(huán)境變量放到process.env中被訪問。

那我們?cè)?code>.npmrc中配置的ELECTRON_MIRROR,在process.env中變成了什么呢?通過添加日志打印,我們會(huì)看到:

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

可以看到,在process.env中,這個(gè)鍵為"npm_config_ELECTRON_MIRROR"npm_config小寫,ELECTORN_MIRROR大寫)。我們知道,nodejs中object對(duì)象的屬性值是大小寫敏感的!所以,當(dāng)上面的mirrorVar代碼運(yùn)行,嘗試獲取process.env中的值的時(shí)候,根本找不到了,因?yàn)闆]有"NPM_CONFIG_ELECTRON_MIRROR"、"npm_config_electron_mirror"、"npm_package_config_electron_mirror""ELECTRON_MIRROR"這些屬性。

然而,如果我們使用npm進(jìn)行安裝的時(shí)候:

npm install -D electron

又能夠很快安裝。Why?!難道npm和yarn下的運(yùn)行環(huán)境有差異嗎?為了驗(yàn)證,我們編寫一個(gè)簡(jiǎn)單的index.js代碼:

console.log("process.env['npm_config_electron_mirror']", process.env['npm_config_electron_mirror']);
console.log("process.env['NPM_CONFIG_ELECTRON_MIRROR']", process.env['NPM_CONFIG_ELECTRON_MIRROR']);
console.log("process.env['npm_config_ELECTRON_MIRROR']", process.env['npm_config_ELECTRON_MIRROR']);

然后,在package.json中添加腳本:

{
  "name": "simple-electron-main-app",
  "version": "1.0.0",
  "scripts": {
+   "start": "node index.js"
  },
  "devDependencies": {}
}

最后,我們分別使用yarn(yarn start)和npm(npm run start)來運(yùn)行腳本:

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

在yarn運(yùn)行上下文中,.npmrc中的"ELECTRON_MIRROR"直接拼接到了"npm_config_"后邊,作為process.env的一個(gè)屬性,所以你只能訪問process.env["npm_config_ELECTRON_MIRROR"]得到值;

在npm運(yùn)行山下文中,.npmrc中的"ELECTRON_MIRROR"首先被轉(zhuǎn)為了小寫,然后拼接到了"npm_config_"后邊,作為了process.env的屬性,所以你需要訪問process.env["npm_config_electron_mirror"]來得到值。

macOS解決方式

終于,我們能解釋為什么當(dāng)我們?cè)?code>.npmrc配置大寫的ELECTRON_MIRROR的時(shí)候,使用yarn add -D electron安裝electron的時(shí)候,二進(jìn)制鏡像地址沒有生效了。那么,解決的辦法也非常簡(jiǎn)單,兩種:

  1. .npmrc配置改為小寫key:electron_mirror="https://npmmirror.com/mirrors/electron/";
  2. 使用npm上下文環(huán)境進(jìn)行安裝。

個(gè)人更加建議按照第一種方式配置,不然大小寫敏感的坑太容易發(fā)生了。

關(guān)于Windows的特別說明

process.env | Node.js API 文檔 (nodejs.cn)

在 Windows 操作系統(tǒng)上,環(huán)境變量不區(qū)分大小寫。

const { env } = require('node:process');

env.TEST = 1;
console.log(env.test);
// => 1

也就是說,在Windows機(jī)器上,即使process.env中的key為"npm_config_ELECTRON_MIRROR",你也可以通過"npm_config_electron_mirror"或者是"NPM_CONFIG_ELECTRON_MIRROR"來訪問這個(gè)值:

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題

macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題文章來源地址http://www.zghlxwxcb.cn/news/detail-456105.html

到了這里,關(guān)于macOS下由yarn與npm差異引發(fā)的Electron鏡像地址讀取問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端npm或yarn裝包踩坑——安裝超時(shí)失敗,設(shè)置鏡像源不生效
  • 淘寶npm鏡像源換新地址,npm設(shè)置最新淘寶鏡像

    ?然后再執(zhí)行以下操作查看是否成功 查看當(dāng)前鏡像地址 或者 2.使用cnpm 可以使用定制的?cnpm?(gzip 壓縮支持) 命令行工具代替默認(rèn)的? npm : ?

    2024年02月11日
    瀏覽(30)
  • npm鏡像地址設(shè)置和查看

    設(shè)置npm的鏡像地址 查看npm當(dāng)前鏡像地址: ? ?

    2024年02月04日
    瀏覽(15)
  • 前端npm, yarn, pnpm下載速度太慢,設(shè)置國內(nèi)鏡像源的幾種方式,讓其速度飛起來

    ?一、說明 在前端開發(fā)的時(shí)候使用國外的鏡像源速度很慢并且容易下載失敗,有時(shí)候需要嘗試多次才有可能下載成功,很麻煩,因此可以切換為國內(nèi)鏡像源,下面為常用的npm,yarn,pnpm切換國內(nèi)鏡像源(以淘寶為例)的方式。 ?二、NPM切換鏡像源 1. 查看當(dāng)前的鏡像源。 ``` npm c

    2024年02月10日
    瀏覽(29)
  • MacOS上配置docker國內(nèi)鏡像倉庫地址

    MacOS上配置docker國內(nèi)鏡像倉庫地址

    docker官方鏡像倉庫網(wǎng)速較差,我們需要設(shè)置國內(nèi)鏡像服務(wù) 我的MacOS docker版本如下 點(diǎn)擊Settings 點(diǎn)擊Docker Engine 修改配置文件,添加 registry-mirrors 參考阿里云的鏡像加速文檔:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 上述鏈接需要登錄阿里云賬號(hào)獲取專屬用戶的鏡像加速器地

    2024年02月09日
    瀏覽(25)
  • 淘寶npm鏡像源換新地址

    簡(jiǎn)介:用CNPM/淘寶源的開發(fā)者們請(qǐng)注意,淘寶NPM 鏡像站喊你切換新域名啦。 新的Web 站點(diǎn):https://npmmirror.com,Registry Endpoint:https://registry.npmmirror.com。 隨著新的域名已經(jīng)正式啟用,老 http://npm.taobao.org 和 http://registry.npm.taobao.org 域名將于 2022 年 05 月 31 日零時(shí)起停止服務(wù)。(望

    2024年02月12日
    瀏覽(18)
  • macOS Ventura 13.5.1(22G90)發(fā)布(附黑/白蘋果系統(tǒng)鏡像地址)

    macOS Ventura 13.5.1(22G90)發(fā)布(附黑/白蘋果系統(tǒng)鏡像地址)

    黑果魏叔 8 月 18 日消息,蘋果今日向 Mac 電腦用戶推送了 macOS 13.5.1 更新(內(nèi)部版本號(hào):22G90),本次更新距離上次發(fā)布隔了 24 天。 本次更新重點(diǎn)修復(fù)了 應(yīng)用位置服務(wù)問題 。蘋果于 7 月 24 日發(fā)布了 macOS Ventura 13.5 更新,不過用戶反饋升級(jí)到新版本之后,無法再管控應(yīng)用的定

    2024年02月11日
    瀏覽(47)
  • macOS Sonoma 14 正式版(23A344)發(fā)布,附黑/白蘋果鏡像下載地址

    macOS Sonoma 14 正式版(23A344)發(fā)布,附黑/白蘋果鏡像下載地址

    黑果魏叔9 月 27日消息,蘋果今日向 Mac 電腦用戶推送了 macOS Sonoma 14 正式版(23A344)。 macOS 14正式版系統(tǒng)發(fā)布:全新功能與改進(jìn),打造更出色的蘋果體驗(yàn) 2023年9月27日,蘋果公司正式發(fā)布了期待已久的macOS 14正式版系統(tǒng)。作為macOS系列的最新版本,這款操作系統(tǒng)為用戶帶來了許

    2024年02月08日
    瀏覽(86)
  • macOS Sonoma 14beta 3(23A5286g)發(fā)布(附黑/白蘋果鏡像地址)

    macOS Sonoma 14beta 3(23A5286g)發(fā)布(附黑/白蘋果鏡像地址)

    黑果魏叔 7 月 6 日消息,蘋果今日向 Mac 電腦用戶推送了 macOS 14 開發(fā)者預(yù)覽版 Beta 3 更新(內(nèi)部版本號(hào):23A5286g),本次更新距離上次發(fā)布隔了 14 天。 小部件在更多地方變得更加強(qiáng)大?,F(xiàn)在,您可以使用WidgetKit構(gòu)建對(duì)交互性和動(dòng)畫過渡的支持,因此人們可以直接在您的小部件

    2024年02月13日
    瀏覽(29)
  • 關(guān)于安裝Node/Yarn/Electron過程中遇到的問題

    關(guān)于安裝Node/Yarn/Electron過程中遇到的問題

    【參考文章】Node.js下載安裝及環(huán)境配置教程 【問題描述】 使用 yarn create vite 命令安裝項(xiàng)目依賴,報(bào)錯(cuò)如下: 【問題解決】 (1)在電腦的開始菜單中,搜索 PowerShell ,然后以 管理員身份運(yùn)行 , (2)以管理員身份運(yùn)行后,會(huì)出現(xiàn)命令窗口,接下來,輸入命令 get-ExecutionPol

    2024年02月03日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包