From dc4b768604a10acd0ffd329867d4b5694fe447bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=B2=20=E8=80=98?= Date: Mon, 20 Nov 2023 15:05:52 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81import=E5=8F=AF?= =?UTF-8?q?=E9=80=89=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- babel.config.js | 6 +++--- src/segment.ts | 12 +++++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/babel.config.js b/babel.config.js index 325997f..8301a4c 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,7 +1,7 @@ module.exports = { presets: [ - [ '@babel/preset-env', {targets: {node: 'current'}} ], - [ '@babel/preset-typescript', {allExtensions: true}], + [ "@babel/preset-env", {targets: {node: "current"}} ], + [ "@babel/preset-typescript", {allExtensions: true}], ], - 'compact': true, + "compact": true, }; diff --git a/src/segment.ts b/src/segment.ts index 9435df9..1eacae9 100644 --- a/src/segment.ts +++ b/src/segment.ts @@ -1,7 +1,7 @@ -import nodejieba from "nodejieba"; -import { load, cut /*, tag */ } from "@node-rs/jieba"; +// import nodejieba from "nodejieba"; +// import { load, cut /*, tag */ } from "@node-rs/jieba"; // @ts-ignore -import { Segment, useDefault } from "segmentit"; +// import { Segment, useDefault } from "segmentit"; import type { IPinyinSegment } from "./declare"; let nodeRsJiebaLoaded = false; // @node-rs/jieba 加载词典。 @@ -15,6 +15,7 @@ let hansIntlSegmenter: any; // Intl.Segmenter export function segment(hans: string, segment?: IPinyinSegment): string[] { // @node-rs/jieba (Rust) if (segment === "@node-rs/jieba") { + const { load, cut /*, tag */ } = require("@node-rs/jieba"); if (!nodeRsJiebaLoaded) { nodeRsJiebaLoaded = true; load(); @@ -25,6 +26,7 @@ export function segment(hans: string, segment?: IPinyinSegment): string[] { // segmentit (Node.js) if (segment === "segmentit") { + const { Segment, useDefault } = require("segmentit"); if (!segmentit) { segmentit = useDefault(new Segment()); } @@ -45,9 +47,9 @@ export function segment(hans: string, segment?: IPinyinSegment): string[] { } } + const nodejieba = require("nodejieba"); // 默认使用 nodejieba (C++) // return nodejieba.tag(hans); // nodejieba 定义的类型返回值错误,先忽略。 - // @ts-ignore - return nodejieba.cutSmall(hans, 4); + return nodejieba.cutSmall(hans, 4) as unknown as string[]; } From cd46352d46b78f0d7ca726e6258d33ee166379a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=B2=20=E8=80=98?= Date: Mon, 20 Nov 2023 15:21:12 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=E5=BF=BD=E7=95=A5=E5=8A=A8?= =?UTF-8?q?=E6=80=81=20import=20lint=20=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/segment.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/segment.ts b/src/segment.ts index 1eacae9..f78e5e4 100644 --- a/src/segment.ts +++ b/src/segment.ts @@ -1,7 +1,3 @@ -// import nodejieba from "nodejieba"; -// import { load, cut /*, tag */ } from "@node-rs/jieba"; -// @ts-ignore -// import { Segment, useDefault } from "segmentit"; import type { IPinyinSegment } from "./declare"; let nodeRsJiebaLoaded = false; // @node-rs/jieba 加载词典。 @@ -15,6 +11,7 @@ let hansIntlSegmenter: any; // Intl.Segmenter export function segment(hans: string, segment?: IPinyinSegment): string[] { // @node-rs/jieba (Rust) if (segment === "@node-rs/jieba") { + // eslint-disable-next-line @typescript-eslint/no-var-requires const { load, cut /*, tag */ } = require("@node-rs/jieba"); if (!nodeRsJiebaLoaded) { nodeRsJiebaLoaded = true; @@ -26,6 +23,7 @@ export function segment(hans: string, segment?: IPinyinSegment): string[] { // segmentit (Node.js) if (segment === "segmentit") { + // eslint-disable-next-line @typescript-eslint/no-var-requires const { Segment, useDefault } = require("segmentit"); if (!segmentit) { segmentit = useDefault(new Segment()); @@ -47,6 +45,7 @@ export function segment(hans: string, segment?: IPinyinSegment): string[] { } } + // eslint-disable-next-line @typescript-eslint/no-var-requires const nodejieba = require("nodejieba"); // 默认使用 nodejieba (C++) // return nodejieba.tag(hans); From 90886a299d73469885e8c3b55c9b29548e9f00c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=B2=20=E8=80=98?= Date: Mon, 20 Nov 2023 15:37:59 +0800 Subject: [PATCH 3/4] feat: Add try/catch for dynimac import --- src/segment.ts | 74 ++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/src/segment.ts b/src/segment.ts index f78e5e4..e39cc19 100644 --- a/src/segment.ts +++ b/src/segment.ts @@ -9,46 +9,50 @@ let hansIntlSegmenter: any; // Intl.Segmenter * 分词并标注词性。 */ export function segment(hans: string, segment?: IPinyinSegment): string[] { - // @node-rs/jieba (Rust) - if (segment === "@node-rs/jieba") { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const { load, cut /*, tag */ } = require("@node-rs/jieba"); - if (!nodeRsJiebaLoaded) { - nodeRsJiebaLoaded = true; - load(); + try { + // @node-rs/jieba (Rust) + if (segment === "@node-rs/jieba") { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const { load, cut /*, tag */ } = require("@node-rs/jieba"); + if (!nodeRsJiebaLoaded) { + nodeRsJiebaLoaded = true; + load(); + } + return cut(hans, false); + // return tag(hans); } - return cut(hans, false); - // return tag(hans); - } - // segmentit (Node.js) - if (segment === "segmentit") { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const { Segment, useDefault } = require("segmentit"); - if (!segmentit) { - segmentit = useDefault(new Segment()); + // segmentit (Node.js) + if (segment === "segmentit") { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const { Segment, useDefault } = require("segmentit"); + if (!segmentit) { + segmentit = useDefault(new Segment()); + } + return segmentit.doSegment(hans, { + simple: true, + }); } - return segmentit.doSegment(hans, { - simple: true, - }); - } - // Intl.Segmenter - if (segment === "Intl.Segmenter") { - if (typeof Intl?.Segmenter === "function") { - if (!hansIntlSegmenter) { - hansIntlSegmenter = new Intl.Segmenter("zh-Hans-CN", { - granularity: "word", - }); + // Intl.Segmenter + if (segment === "Intl.Segmenter") { + if (typeof Intl?.Segmenter === "function") { + if (!hansIntlSegmenter) { + hansIntlSegmenter = new Intl.Segmenter("zh-Hans-CN", { + granularity: "word", + }); + } + return [...hansIntlSegmenter.segment(hans)].map((s) => s.segment); } - return [...hansIntlSegmenter.segment(hans)].map((s) => s.segment); } - } - // eslint-disable-next-line @typescript-eslint/no-var-requires - const nodejieba = require("nodejieba"); - // 默认使用 nodejieba (C++) - // return nodejieba.tag(hans); - // nodejieba 定义的类型返回值错误,先忽略。 - return nodejieba.cutSmall(hans, 4) as unknown as string[]; + // eslint-disable-next-line @typescript-eslint/no-var-requires + const nodejieba = require("nodejieba"); + // 默认使用 nodejieba (C++) + // return nodejieba.tag(hans); + // nodejieba 定义的类型返回值错误,先忽略。 + return nodejieba.cutSmall(hans, 4) as unknown as string[]; + } catch (ex) { + return [hans]; + } } From 5ead496a4293a6b4b46ad182e99857f96120856b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=B2=20=E8=80=98?= Date: Mon, 20 Nov 2023 23:41:01 +0800 Subject: [PATCH 4/4] Release 3.0.0-alpha.7 --- CHANGELOG.md | 6 +++++- package.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48769cd..d42e858 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,11 @@ ---- -## 3.0.0-alpha.6 (2022-09-21) +## 3.0.0-alpha.7 (2023-11-20) + +- feat: dynamic import optional dependencies. + +## 3.0.0-alpha.6 (2023-11-12) - feat: support [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter) for segment. - dict: 雪茄 diff --git a/package.json b/package.json index 2ab1c7c..78a5c37 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pinyin", - "version": "3.0.0-alpha.6", + "version": "3.0.0-alpha.7", "description": "汉语拼音转换工具。", "main": "./lib/pinyin.js", "module": "./esm/pinyin.js",