whatwg-url vs url-parse vs url vs query-string vs url-search-params
"URL 和查詢字串處理"npm套件對比
3 年
whatwg-urlurl-parseurlquery-stringurl-search-params類似套件:
URL 和查詢字串處理是什麼?

在 JavaScript 中,URL 和查詢字串處理是網頁開發中常見的任務。這些任務包括解析 URL、提取查詢字串參數、編碼和解碼查詢字串,以及構建新的 URL。這些操作對於處理用戶輸入、創建動態鏈接和實現前端路由等功能至關重要。這些 npm 套件提供了各種工具來簡化這些任務,從基本的查詢字串解析到更複雜的 URL 操作。query-string 是一個輕量級的庫,專注於查詢字串的解析和序列化,url 是 Node.js 的內建模組,提供全面的 URL 操作功能,url-parse 提供快速的 URL 解析,url-search-params 提供一個簡單的 API 來操作查詢字串,whatwg-url 實現了 WHATWG URL 標準,提供一致的 URL 操作方法。

npm下載趨勢
GitHub Stars 排名
統計詳情
套件
下載數
Stars
大小
Issues
發布時間
許可
whatwg-url90,534,496
40198.6 kB55 個月前MIT
url-parse25,053,422
1,03563 kB13-MIT
url19,005,917
38178.3 kB171 年前MIT
query-string12,724,632
6,87253 kB291 個月前MIT
url-search-params66,655
761-07 年前MIT
功能比較: whatwg-url vs url-parse vs url vs query-string vs url-search-params

查詢字串解析

  • whatwg-url:

    whatwg-url 提供符合 WHATWG 標準的查詢字串解析功能,支持嵌套和數組參數。它提供了一個標準化的介面來處理查詢字串,確保在不同環境中的一致性。

  • url-parse:

    url-parse 提供快速的 URL 解析,包括查詢字串部分。它能夠將 URL 解析為各個組件,並提供簡單的 API 來訪問查詢參數。

  • url:

    url 模組提供基本的查詢字串解析功能,但主要集中於整個 URL 的解析。它能夠解析 URL 的各個組件,包括查詢字串,但不提供專門的查詢字串處理功能。

  • query-string:

    query-string 提供簡單的查詢字串解析功能,支持解析嵌套和數組參數。它能夠將查詢字串轉換為易於使用的物件格式,並處理 URL 編碼。

  • url-search-params:

    url-search-params 提供原生的查詢字串操作介面,允許您輕鬆添加、刪除和修改查詢參數。它是瀏覽器和 Node.js 中的原生實現,提供一致的 API。

查詢字串序列化

  • whatwg-url:

    whatwg-url 提供符合 WHATWG 標準的查詢字串序列化功能,確保序列化過程遵循最新的標準。它支持嵌套和數組參數的序列化。

  • url-parse:

    url-parse 提供查詢字串序列化功能,但不如 query-string 專注。它允許您訪問查詢參數並手動進行序列化。

  • url:

    url 模組提供基本的查詢字串序列化功能,但主要集中於整個 URL 的序列化。它能夠將 URL 的各個組件轉換為字串,包括查詢字串。

  • query-string:

    query-string 提供查詢字串序列化功能,支持將物件轉換為查詢字串,並處理嵌套和數組參數。它允許自定義序列化選項,如編碼方式和分隔符。

  • url-search-params:

    url-search-params 提供原生的查詢字串序列化功能,允許您從 URLSearchParams 物件生成查詢字串。它支持自動處理重複參數和嵌套結構。

URL 組件訪問

  • whatwg-url:

    whatwg-url 提供對整個 URL 組件的訪問,符合 WHATWG 標準。

  • url-parse:

    url-parse 提供對 URL 各個組件的訪問,包括查詢字串。

  • url:

    url 模組提供對整個 URL 組件的訪問,包括協議、主機、路徑和查詢字串。

  • query-string:

    query-string 主要專注於查詢字串的處理,不提供對整個 URL 組件的訪問。

  • url-search-params:

    url-search-params 只提供對查詢字串組件的訪問,允許您操作查詢參數。

瀏覽器支持

  • whatwg-url:

    whatwg-url 在所有主流瀏覽器中均可用,並且對遵循 WHATWG 標準的環境提供一致的支持。

  • url-parse:

    url-parse 在所有主流瀏覽器中均可用,並且對舊版瀏覽器有良好的支持。

  • url:

    url 模組是 Node.js 的內建模組,主要用於伺服器端,但在瀏覽器環境中不適用。

  • query-string:

    query-string 在所有主流瀏覽器中均可用,並且對舊版瀏覽器有良好的支持。

  • url-search-params:

    url-search-params 是瀏覽器的原生 API,所有現代瀏覽器均支持,但在舊版瀏覽器中可能需要 polyfill。

範例程式碼

  • whatwg-url:

    WHATWG URL 解析範例

    import { URL } from 'whatwg-url';
    
    const url = new URL('https://www.example.com/path?name=John&age=30');
    
    // 訪問 URL 組件
    console.log(url.protocol); // 輸出: https:
    console.log(url.hostname);  // 輸出: www.example.com
    console.log(url.search);    // 輸出: ?name=John&age=30
    
    // 使用 URLSearchParams 操作查詢參數
    const params = url.searchParams;
    params.append('hobby', 'reading');
    params.delete('age');
    console.log(params.toString()); // 輸出: name=John&hobby=reading
    
  • url-parse:

    URL 解析範例

    import URLParse from 'url-parse';
    
    const parsedUrl = URLParse('https://www.example.com/path?name=John&age=30', true);
    console.log(parsedUrl);
    // 輸出: URL { ... , query: { name: 'John', age: '30' }, ... }
    
    // 訪問查詢參數
    const name = parsedUrl.query.name;
    const age = parsedUrl.query.age;
    console.log(name, age);
    // 輸出: John 30
    
  • url:

    URL 解析與序列化範例

    const url = require('url');
    
    // 解析 URL
    const parsedUrl = url.parse('https://www.example.com/path?name=John&age=30');
    console.log(parsedUrl);
    // 輸出: { protocol: 'https:', host: 'www.example.com', pathname: '/path', query: 'name=John&age=30', ... }
    
    // 序列化 URL
    const serializedUrl = url.format(parsedUrl);
    console.log(serializedUrl);
    // 輸出: https://www.example.com/path?name=John&age=30
    
  • query-string:

    查詢字串解析與序列化範例

    import queryString from 'query-string';
    
    // 解析查詢字串
    const parsed = queryString.parse('?name=John&age=30&hobbies=reading&hobbies=traveling');
    console.log(parsed);
    // 輸出: { name: 'John', age: '30', hobbies: ['reading', 'traveling'] }
    
    // 序列化物件為查詢字串
    const stringified = queryString.stringify({ name: 'Jane', age: 25, hobbies: ['music', 'sports'] });
    console.log(stringified);
    // 輸出: name=Jane&age=25&hobbies=music&hobbies=sports
    
  • url-search-params:

    查詢字串操作範例

    const params = new URLSearchParams('?name=John&age=30');
    
    // 添加查詢參數
    params.append('hobby', 'reading');
    
    // 刪除查詢參數
    params.delete('age');
    
    // 修改查詢參數
    params.set('name', 'Jane');
    
    // 轉換為查詢字串
    const queryString = params.toString();
    console.log(queryString);
    // 輸出: name=Jane&hobby=reading
    
如何選擇: whatwg-url vs url-parse vs url vs query-string vs url-search-params
  • whatwg-url:

    選擇 whatwg-url 如果您需要遵循最新的 URL 標準並希望在不同環境中獲得一致的行為。它提供了符合 WHATWG 標準的 URL 和 URLSearchParams 實現,適合需要高兼容性和標準化的應用。

  • url-parse:

    選擇 url-parse 如果您需要一個快速且輕量級的 URL 解析器。它提供了簡單的 API 來解析 URL 並訪問各個組件,適合需要快速解析 URL 而不需要過多功能的應用。

  • url:

    如果您正在開發 Node.js 應用並需要全面的 URL 操作功能,內建的 url 模組是最佳選擇。它提供了完整的 URL 解析、序列化和操作功能,適合各種複雜的場景。

  • query-string:

    如果您需要一個輕量級且易於使用的庫來解析和序列化查詢字串,query-string 是一個不錯的選擇。它提供了簡單的 API 來處理查詢參數,特別是在需要處理嵌套和數組參數時。

  • url-search-params:

    如果您只需要操作查詢字串,並希望使用原生 API,url-search-params 是一個很好的選擇。它提供了簡單的介面來添加、刪除和修改查詢參數,並且是瀏覽器和 Node.js 中的原生實現。