psl

中文文档
1.15.0发布于 2024/12/02MITTypeScriptESM + CJS近 30 天下载 1.8亿

基于公共后缀列表的域名解析器

中文使用文档
文档目录11 节
  1. 什么是公共后缀列表 ?
  2. 安装
  3. 节点.js
  4. 浏览器
  5. API 密码
  6. psl.parse(domain)
  7. psl.get(domain)
  8. psl.isValid(domain)
  9. 测试和建筑
  10. 鸣谢
  11. 许可证

psl (公共后缀列表)

Node.js CI

psl 是一个 JavaScript 基于 公共后缀列表。 。 。 .

此项实施工作将对照 mozilla主持的测试数据 并欣然提供 科莫多语Name。 。 。 .

提供交叉浏览器测试 BrowserStack

什么是公共后缀列表 ?

公共后缀列表是一个交叉复仇倡议,提供准确列表 域名后缀.

公共后缀列表是Mozilla项目的一项举措,但 维持为社区资源。 它可用于任何软件, 但最初是为了满足浏览器制造商的需要而创建的.

一个"公共后缀"是互联网用户可以直接注册姓名的后缀. 一些公共后缀的例子有".com",".co.uk"和"pvt.k12.wy.us"等. 这个 公共后缀 列表是所有已知的公共后缀列表.

资料来源: http://publicsaftix.org (中文(简体) )

安装

这个模块既可用于Node.js,也可用于浏览器. 详见下文 细节.

节点.js

本模块在Node.js v8,v10,v12,v14,v16,v18,v20和v22上进行测试. 见 .github/workflows/node.js.yml。 。 。 .

npm install psl

无害环境管理

从版本 v1.13.0 您现在可以导入 psl 作为无害环境管理.

import psl from 'psl';

常见JS

如果您的工程仍然使用普通JS, 您可以继续导入模块, 如 在以前的版本中.

const psl = require('psl');

浏览器

使用捆绑器

如果你用捆绑机来构建你的应用程序, 你应该能够 import 和(或) require 和Node.js一样的模块.

无害环境管理(使用CDN)

在现代浏览器中,您也可以直接从一个 CDN用于 示例:

import psl from 'https://unpkg.com/psl@latest/dist/psl.mjs';

UMD / 普通JS 语言

终于可以下载了 dist/psl.umd.cjs 并将其写入脚本标签.

<script src="psl.umd.cjs"></script>

此脚本被捆绑并包裹在 是吗 包装器,所以你应该可以单独使用或与模块一起使用 加载器.

该剧本也提供于最受欢迎的CDN上. 例如:

  • https://unpkg.com/psl@latest/dist/psl.umd.cjs (中文(简体) )

API 密码

psl.parse(domain)

基于公共后缀列表的解析域. 返回 a Object 改为: 属性 :

  • tld: 顶级域(这是 公共后缀) (中文(简体) ).
  • sld: 第二级域名(域名的第一个私有部分).
  • domain:域名为: sld + 键 tld。 。 。 .
  • subdomain: 域中可选的剩余部分.

实例

没有子域的解析域 :

import psl from 'psl';

const parsed = psl.parse('google.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'google'
console.log(parsed.domain); // 'google.com'
console.log(parsed.subdomain); // null

用子域解析域 :

import psl from 'psl';

const parsed = psl.parse('www.google.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'google'
console.log(parsed.domain); // 'google.com'
console.log(parsed.subdomain); // 'www'

用嵌入子域分析域 :

import psl from 'psl';

const parsed = psl.parse('a.b.c.d.foo.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'foo'
console.log(parsed.domain); // 'foo.com'
console.log(parsed.subdomain); // 'a.b.c.d'

psl.get(domain)

获取域名, sld + 键 tld. 回归 null 如果无效.

实例

import psl from 'psl';

// null input.
psl.get(null); // null

// Mixed case.
psl.get('COM'); // null
psl.get('example.COM'); // 'example.com'
psl.get('WwW.example.COM'); // 'example.com'

// Unlisted TLD.
psl.get('example'); // null
psl.get('example.example'); // 'example.example'
psl.get('b.example.example'); // 'example.example'
psl.get('a.b.example.example'); // 'example.example'

// TLD with only 1 rule.
psl.get('biz'); // null
psl.get('domain.biz'); // 'domain.biz'
psl.get('b.domain.biz'); // 'domain.biz'
psl.get('a.b.domain.biz'); // 'domain.biz'

// TLD with some 2-level rules.
psl.get('uk.com'); // null);
psl.get('example.uk.com'); // 'example.uk.com');
psl.get('b.example.uk.com'); // 'example.uk.com');

// More complex TLD.
psl.get('c.kobe.jp'); // null
psl.get('b.c.kobe.jp'); // 'b.c.kobe.jp'
psl.get('a.b.c.kobe.jp'); // 'b.c.kobe.jp'
psl.get('city.kobe.jp'); // 'city.kobe.jp'
psl.get('www.city.kobe.jp'); // 'city.kobe.jp'

// IDN labels.
psl.get('食狮.com.cn'); // '食狮.com.cn'
psl.get('食狮.公司.cn'); // '食狮.公司.cn'
psl.get('www.食狮.公司.cn'); // '食狮.公司.cn'

// Same as above, but punycoded.
psl.get('xn--85x722f.com.cn'); // 'xn--85x722f.com.cn'
psl.get('xn--85x722f.xn--55qx5d.cn'); // 'xn--85x722f.xn--55qx5d.cn'
psl.get('www.xn--85x722f.xn--55qx5d.cn'); // 'xn--85x722f.xn--55qx5d.cn'

psl.isValid(domain)

检查一个域是否有有效的公共后缀 。 回返a Boolean 显示 域是否有有效的公共后缀.

示例

import psl from 'psl';

psl.isValid('google.com'); // true
psl.isValid('www.google.com'); // true
psl.isValid('x.yz'); // false

测试和建筑

对Node.js和浏览器都有测试(使用 剧作家 财务报告和审定财务报表 浏览器Stack) (中文(简体) ).

# Run tests in node.
npm test
# Run tests in browserstack.
npm run test:browserstack

# Update rules from publicsuffix.org
npm run update-rules

# Build ESM, CJS and UMD and create dist files
npm run build

如果你看到可能的改进,请随意叉出!

鸣谢

许可证

《麻省理工学院许可证》

版权 (c) 2014-2024 卢波·蒙特罗 卢波蒙特罗@gmail.com

特此免费准许任何人获得副本 ,用于处理 在软件中不受限制,包括不受限制的权利 使用、复制、修改、合并、出版、分发、分许可证和/或出售 软件的复制件,并允许该软件所针对的人 满足下列条件:

上述版权通知和本许可通知应列入 软件的所有副本或大部分.

软件是提供的"AS IS", 没有任何的恐惧, EXPRESS OR ,包括但不限制于雇佣军的保障, 特别目的和非目的的证明。 绝对不会 B. 任何索赔、索赔或其他索赔的索赔人或 责任,在契约、契约或其他行为中,产生于, 或与溶剂或溶剂的使用或 软件.

版本与发布记录

psl 共发布 53 个版本,首次发布于 2014/10/14;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.15.0latest2024/12/021.9 年前
1.14.02024/11/291.9 年前
1.13.02024/11/222 年前
1.13.0-beta.0next2024/11/222 年前
1.12.02024/11/222 年前
1.11.02024/11/212 年前

关于 psl 的常见问题

psl 是什么?

基于公共后缀列表的域名解析器

如何安装 psl?

在项目目录运行 npm install psl,或使用 pnpm add / yarn add / bun add。

psl 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

psl 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

psl 可以商用吗?

psl 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

psl 的下载量有多少?

根据 npm 官方下载统计,psl 在 2026/10/07 – 2026/11/05 这 30 天内被下载 180,293,624 次,日均约 6,009,787 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

psl 还在维护吗?

最新版本 1.15.0 发布于 2024/12/02(1.9 年前);至今共发布 53 个版本,其中过去 12 个月发布了 0 个;首次发布于 2014/10/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。