Node獲取pnpm安裝的包源碼及代碼路徑操作
前言
在改造老工程的包依賴管理的時(shí)候,有時(shí)候我們想引入一些社區(qū)比較好用的包管理;有時(shí)候一些阻塞點(diǎn)會(huì)阻攔我們,特別我們構(gòu)建流程可能會(huì)拷貝node_modules
包源碼的行為;
舉個(gè)研發(fā)例子
不同公司的CLI因?yàn)槊鎸?duì)的業(yè)務(wù)場(chǎng)景和構(gòu)建場(chǎng)景不一樣,有些時(shí)候,我們會(huì)做一些差異化的特性,比如工程前端CLI有暴露代碼映射拷貝行為,就是打包的時(shí)候會(huì)把node_modules
下的某些包的資源拷貝到特定路徑,用于后續(xù)其他處理
// 本地調(diào)試 editor 時(shí)需要打開以下配置 copy: { // editor source reference 'dist/libs/ckeditor': 'node_modules/xxxx-editor/dist', },
npm安裝的目錄結(jié)構(gòu)是固定的,包名+源文件 ,所以尋址是固定的
問題聚焦
當(dāng)我們想用pnpm這類的時(shí)候,安裝的node_modules
目錄結(jié)構(gòu)就是有他們自己的一些特性,而不是一個(gè)常規(guī)npm生成的node_modules
結(jié)構(gòu)
pnpm 默認(rèn)創(chuàng)建了一個(gè)非平鋪的 node_modules,因此代碼無法訪問任意包
如圖所示:
這種包名加版本號(hào)的,就沒法作為一個(gè)固定規(guī)律尋址了。因?yàn)榇嬖诳勺冃?!那么我們?shí)在要搞,有木有法子?
姿勢(shì)
node里面有一個(gè)api [require.resolve]很實(shí)用,剛好解決了我們這個(gè)場(chǎng)景;它可以返回require
包的絕對(duì)路徑【基于package.json的入口字段】
demo
在我的一個(gè)本地工程內(nèi),采用pnpm安裝依賴,輸出的絕對(duì)路徑可以尋址到源碼
console.log(require.resolve('yaml')); console.log(require.resolve('axios')); // /Users/code/engineering-tools/node_modules/.pnpm/yaml@2.1.1/node_modules/yaml/dist/index.js // /Users/code/engineering-tools/node_modules/.pnpm/axios@0.21.4/node_modules/axios/index.js
那么怎么適配我們之前的配置文件呢?
// 本地調(diào)試 editor 時(shí)需要打開以下配置 copy: { // editor source reference 'dist/libs/ckeditor': require.resolve('xxxx-editor'), },
這時(shí)候CLI運(yùn)行態(tài)的時(shí)候就可以動(dòng)態(tài)檢測(cè)到這個(gè)模塊的絕對(duì)路徑,拿到了絕對(duì)路徑。接下來想拷貝什么就很方便做到了~
以上就是Node獲取pnpm安裝的包源碼及代碼路徑操作的詳細(xì)內(nèi)容,更多關(guān)于Node pnpm安裝包路徑的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
node.js 利用流實(shí)現(xiàn)讀寫同步,邊讀邊寫的方法
下面小編就為大家?guī)硪黄猲ode.js 利用流實(shí)現(xiàn)讀寫同步,邊讀邊寫的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09基于node打包可執(zhí)行文件工具_(dá)Pkg使用心得分享
下面小編就為大家分享一篇基于node打包可執(zhí)行文件工具_(dá)Pkg使用心得分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01nodejs中向HTTP響應(yīng)傳送進(jìn)程的輸出
這篇文章主要介紹了nodejs中向HTTP響應(yīng)傳送進(jìn)程的輸出 ,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03websocket+node.js實(shí)現(xiàn)實(shí)時(shí)聊天系統(tǒng)問題咨詢
最近新學(xué)習(xí)websocket,做了一個(gè)實(shí)時(shí)聊天。用Node.js搭建的服務(wù):serevr.js. 兩個(gè)相互通信頁面:client.html 和server.html 但是就是有很多問題,下面通過本文給大家分享下2017-05-05node.js使用npm 安裝插件時(shí)提示install Error: ENOENT報(bào)錯(cuò)的解決方法
這篇文章主要介紹了node.js使用npm 安裝插件時(shí)提示install Error: ENOENT報(bào)錯(cuò)的解決方法,需要的朋友可以參考下2014-11-11nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù)
這篇文章主要介紹了nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12node基于puppeteer模擬登錄抓取頁面的實(shí)現(xiàn)
本篇文章主要介紹了node基于puppeteer模擬登錄抓取頁面的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05nodejs部署到騰訊云服務(wù)器的實(shí)現(xiàn)(寶塔面板linux系統(tǒng))
本文主要介紹了nodejs部署到騰訊云服務(wù)器的實(shí)現(xiàn)(寶塔面板linux系統(tǒng)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06