介紹最新的 npm Dependency Selector Syntax(相依套件的選擇器語法)

閱讀時間約 4 分鐘
Introducing the new npm Dependency Selector Syntax | GitHub Changelog
Engineering-Security.png (1200×630) (github.blog)
`npm query` 是從 npm v8.16.0 開始最新的指令, 他接收一個 Dependency Selector(如同在 Dependency Selector Syntax Specification 所定義的) 然後回傳一個從你的專案的 dependencies 篩選過後的 JSON Array 或 NodeList. 我們相信這個能力就是這個套件管理生態裡缺少的一角; 有了他的介紹, 我們希望可以將開發者的潛力解鎖, 捫心自問關於套件的 dependencies, 之間的關係和相關的 metadata.
大部分的 JavaScript 開發者, Dependency Selector Syntax 看起來熟悉, 因為他確實是採用 CSS 的形式. 我們取用了現存的, 已知的語言, 以及他的 operators 讓不同的套件資訊廣泛存取.

範例使用方式

如果我要列出所有的 dependencies(與 `npm list --all` 類似), 我可以執行:
npm query "*"

如果我要找出專案內每個 `react` 和 `lodash` 的版本, 我可以執行:
npm query "#react, #lodash"

如果我要找出所有 `react` 版本, 但並非定義在 peer dependency, 我可以執行:
npm query "#react:not(.peer)"

如果我要找出所有專案內的 dependencies, 且使用 `MIT` 授權, 我會將查詢改成:
npm query "[license=MIT]"

如果我要找出所有專案內 git dependencies, 我可以執行:
npm query ":type(git)"

如果我要找出有哪些 transitive dependencies 使用了 `postinstall` script, 我可以執行:
npm query ":attr(scripts, [postinstall]):not(:root > *)"

程式使用方式

我們知道大部分在這個生態系的開發者也會想要自己運用這個新語法, 所以我們把他建立在 CLI 的程式大腦中. 在底層, 我們將新的 `.querySelectorAll()` 方法加入到現存的 `Node` Class, 在 `@npmcli/arborist` 函式庫中使用. 工具開發者們現在也可以載入並查詢他們的 dependencies, 如同我們這樣.
// index.js
const Arborist = require('@npmcli/arborist') 
const arb = new Arborist({})
arb.loadActual((tree) => {
   // query all workspaces
  const results = await tree.querySelectorAll('.workspace')
  console.log(results)
})
你可以在我們的文件上學到更多關於語法與用途: https://docs.npmjs.org/cli/v8/using-npm/dependency-selectors

下一步是甚麼?

未來我們計畫根據 registry metadata 加入新的 pseudo states 和 selectors, 應該會將另一些關於 auditing 的能力解鎖(舉例包括 `:outdated`, `:deprecated`, `:vulnerable`, `:cve()` 和 `:cwe()` ). 如同在原本的 RFC proposal 中所註記的, 我們也會考慮支援 `query` flag 或是從 `stdin` 讀取現存的指令.
0會員
5內容數
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
疫後韓風,介紹最新韓國流行曲 MV ATEEZ - Work這篇文章介紹了最新的韓國流行曲 MV,以及觀察韓流獨步歌林的原因。文章談到了韓國流行歌曲的視覺剌激觀察和歌手 ATEEZ 的內容創作過程。
Thumbnail
avatar
David Tai
2024-06-04
今天才在旅展買了高雄海霸王城市商旅真愛館的住宿券!晚上就看到網紅蝦土豆的最新影片在介紹這間飯店的自助餐!真巧!請訂閱【飛火米】YT頻道!謝謝大家! 好巧! 我今天才在旅展買了高雄海霸王城市商旅真愛館的住宿券! 晚上就看到美食網紅「蝦土豆」的最新影片在介紹這間飯店的自助餐! 城市商旅真愛館就在駁二藝術特區這裡! 別的不說! 光是地理位置就超讚! 我很早以前就很想來住高雄城市商旅真愛館了! 暑假
Thumbnail
avatar
飛火米
2024-06-02
美食網紅【蝦土豆】的最新影片之一就有在介紹我最愛的台鐵便當喔!請訂閱【火車愛我跑跑跑】YT頻道!謝謝大家! 美食網紅【蝦土豆】的最新影片之一就有介紹台鐵便當! 我超愛吃台鐵便當! 是台鐵便當鐵粉! 三月和老爸去高雄玩! 旅程結束搭高鐵返回板橋時! 也有在高鐵左營站的台鐵便當本舖買台鐵便當上車吃! 在高鐵上吃台鐵便當已經變成一種傳統! 一種老饕才
Thumbnail
avatar
飛火米
2024-04-14
Ovelap介紹 Nike Cortez 最新配色「Black/Sail」正式發佈備受喜愛的 Nike Cortez 系列近期正式亮相了全新配色「Black/Sail」,這次 Nike 在黑白鞋身下搭配米白色鞋底,保留經典的同時也帶來復古懷舊的美感。 此鞋款的設計使用黑/米白/亮棕色,整體極度簡約,適用於各種場合與穿搭風格。與往常不同,Nike 這次使用最頂級的皮質來代替原用的
Thumbnail
avatar
Ovelap
2023-08-19
Ovelap介紹 最新復刻Air Jordan 3「Fear」繼推出 Air Jordan 11「DMP」全新復刻版本、A Ma Maniére x Air Jordan 5 「Black」之後,Air Jordan 3「Fear」在睽違 10 年之後,也準備回歸球鞋市場。 早在 1 月時,就傳出 Air Jordan 3「Fear」即將復刻的消息,該鞋忠實
Thumbnail
avatar
Ovelap
2023-07-12
聯手 Katy Perry 的鄉村浪漫,Thomas Rhett 的最新單曲超級暖心! Hi there,美國鄉村歌手 Thomas Rhett 在今年4月時發行了他的最新專輯,也是他的第六張個人專輯《Where We Started》(2022),而發行時宣布了這張專輯的第六支單曲,是和 Katy Perry 合作的同名歌曲〈Where We Started〉(2022)。
Thumbnail
avatar
睿忒
2022-06-01
文字MP3 V3.5 版(真人文字轉語音軟體,支援中文台灣男女聲口音,2022 年最新版)文字MP3 V3.5 版採用人工智慧自然語意分析與語音合成專利技術,可以依據前後文語意,正確的朗讀出中文(包括破音字)、英文與阿拉伯數字(包括日期、百分比),並且轉存成 MP3 或 WAV 檔案。 文字MP3 V3.5 版,針對不同的使用需要,提供「整篇朗讀」與「隨選朗讀」兩種朗讀介面。
Thumbnail
avatar
GPT工作術|與你一起補給工作的AI能量 智慧寫作·聲音創造·法遵合規
2022-02-20
为什么 Kardashian-Jenners 试图阻止 Blac Chyna 的最新法律请 在 E! 获得的法庭文件中!新闻,克里斯詹纳以及金卡戴珊、凯莉詹纳和科勒卡戴珊声称必须撤销传票,“因为它们带来了不必要的烦恼。” Rob Kardashian 与 Blac Chyna 的官司仍然是家庭事务。 2022 年 2 月,罗伯对其前未婚妻的袭击和殴打指控即将开庭,他年幼女儿梦·
Thumbnail
avatar
Jersi Wela
2021-12-16
【財報分析】簡評MercadoLibre(MELI)最新發布的2021Q3業績南美電商巨頭MercadoLibre(MELI)在11月初發布最新的2021Q3財報後,股價一度漲到1,700美元左右,但其後又隨市場回落,財報後的漲幅幾乎完全蒸發。如果再把時間拉長一點看,今年第一季和第二季,MELI其實都交出相當不錯的財報表現,但今年以來股價就是沒有甚麼特別反應,為甚麼呢?
Thumbnail
avatar
三苗
2021-11-15