当前位置: 首页 > news >正文

做同性恋网站犯法吗seo咨询河北

做同性恋网站犯法吗,seo咨询河北,jsp网站 iis,科普网站建设背景:在调研 formatjs/cli 使用(使用 formatjs/cli 进行国际化文案自动提取 )过程中,发现有以下需求formatjs/cli 无法满足: id 需要一定的语义化; defaultMessage和Id不能直接hash转换; 需要…

背景:在调研 @formatjs/cli 使用(使用 @formatjs/cli 进行国际化文案自动提取 )过程中,发现有以下需求@formatjs/cli 无法满足:

  1. id 需要一定的语义化;

  2. defaultMessage和Id不能直接hash转换;

  3. 需要直接从中文转换为formatMessage

  4. 需要显式注入ID(个人觉得编译时注入还是反直觉了一点);

另外也是希望借助这个机会好好学一下AST相关知识,所以决定自己写一个AST转换工具。

*注意:工具无法满足脱离中文文案和文件名的语义化ID需求。

实现效果

如何使用

https://www.npmjs.com/package/core-i18n-cli?activeTab=readme

安装

npm i -g core-i18n-cli

CLI 参数

corei18n -i, --init

初始化项目,生成配置文件 corei18n.config.json,方便根据你的项目需求进行配置。

默认配置包括以下参数:

export type ProjectConfig = {/** corei18n文件根目录,用于放置提取的langs文件 */corei18nDir: string;/** 导出的新增文案目录 */tempLangFile: string;/** 需要做国际化的文件目录 */path: string;/** 已有文案入口,用于过滤已经存在id的文案,支持js、ts、json */localLangFile?: string;/** 忽略的文件 string | string[],参考GlobOptions.ignore */ignoreFile?: GlobOptions["ignore"];/** 生成id的方式,默认为translate,需要提供baiduApiKey */idType: "translate" | "hash";/** 百度翻译开放平台配置,参考 https://fanyi-api.baidu.com/product/113 */baiduApiKey?: {appId: string;appKey: string;};/** 生成id前缀,会以.拼接在id前面 */idSuffix?: string;/** 替换后是否保留DefaultMessage,默认为false */keepDefaultMessage?: boolean;/** 格式化代码的选项,参考prettier.options */prettierOptions?: Options;
};

例子:

{"corei18nDir": "./.corei18n","tempLangFile": "./.corei18n/tempLang.json","path": "src/pages/**/*.{ts,js,jsx,tsx}","localLangFile": "src/locales/zh-CN.ts","ignoreFile": "src/pages/**/*.d.ts","baiduApiKey": {"appId": "","appKey": ""},"keepDefaultMessage": false,"idType": "hash","idSuffix": "tools","prettierOptions": {"parser": "typescript","printWidth": 80,"singleQuote": true,"trailingComma": "all","proseWrap": "never"}
}

corei18n -s, --scan

一键扫描指定文件夹下的所有中文文案,新增文案会存放至tempLangFile

corei18n -r, --replace

一键替换指定文件夹下的所有中文文案


实现过程

关于AST

AST explorer:https://astexplorer.net/

AST(抽象语法树)是源代码的抽象表示形式,它捕捉了代码的结构,而不关心具体的字符格式。AST是在编译器设计和解析源代码时常见的一种数据结构。

在编程语言的编译过程中,源代码首先被解析器解析成一种称为AST的中间表示。AST反映了代码的语法结构,每个节点代表代码中的一个结构元素,如表达式、语句、函数、变量等。这种树状结构使得程序的结构和语法可以被更容易地分析和处理。

操作流程

暂时无法在飞书文档外展示此内容

scan 阶段

  1. 根据pathignoreFile得到所有目标文件

  2. 对于每个文件,读取文件内容,将代码转换为AST

  3. 遍历AST节点,若是StringLiteral或者JSXText,判断是否符合要求(包含中文且不属于default Message),如果是则记录下来

  4. 过滤得到所有新增文案并生成id

  5. 将新增文案导出到目标文件

replace 阶段

  1. 根据pathignoreFile得到所有目标文件

  2. 获取所有文案对;

  3. 对于每个文件,读取文件内容,将代码转换为AST

  4. 遍历AST节点,若是StringLiteral或者JSXText,判断是否符合要求(包含中文且不属于default Message),如果是则替换当前AST节点;

  5. 使用prettier进行格式化;

  6. 根据AST生成代码写入文件路径;

依赖的npm包

babel

  1. @babel/core:负责整个编译过程的调度和控制;

  2. @babel/parser:用于将 JavaScript 源代码解析成抽象语法树(AST);

  3. @babel/traverse:用于遍历和修改 AST 的工具;

  4. @babel/types:用于创建、检查和修改 AST 节点

cli相关

  1. commander:解析命令行参数和生成帮助信息;

  2. inquirer:交互式命令行工具,用于收集用户输入;

  3. glob:匹配文件路径

  4. lodash:工具库

  5. prettier:代码格式化

遇到的问题

解决babel/generater生成中文等特殊字符被转义为Unicode编码

const newCode = generator.default( ast, { retainLines: true, jsescOption: { minimal: true } }, // add this code ).code;

Error [ERR_REQUIRE_ESM]: require() of ES Module

// tsconfig { "compilerOptions": { "module": "esnext", "target": "esnext", "moduleResolution": "node", } }

// package.json { "type": "module" }

Error [ERR_MODULE_NOT_FOUND]: Cannot find module

https://github.com/microsoft/TypeScript/issues/16577

https://stackoverflow.com/questions/62619058/appending-js-extension-on-relative-import-statements-during-typescript-compilat

原因:tsc输出时不会添加文件拓展名,nodejs运行时不会自动匹配文件拓展名(居然是个久远的未解决的问题==)

尝试在文件首行添加 --experimental-specifier-resolution=node 无效

使用tsc-alias为导出文件添加js后缀后解决:

npm install --save-dev tsc-alias

// tsconfig.json { "compilerOptions": { ... }, "tsc-alias": { "resolveFullPaths": true, "verbose": false } }

"scripts": { "compile": "tsc && tsc-alias" }

参考

  • 小玩具:利用AST实现代码文案的自动翻译与替换 - 掘金

  • https://github.com/alibaba/kiwi/tree/master/kiwi-cli


文章转载自:
http://dinncoxcv.wbqt.cn
http://dinncomiscalculate.wbqt.cn
http://dinncousib.wbqt.cn
http://dinncocaliber.wbqt.cn
http://dinncosulfury.wbqt.cn
http://dinncoalptop.wbqt.cn
http://dinncobushy.wbqt.cn
http://dinncounrequited.wbqt.cn
http://dinncotankie.wbqt.cn
http://dinncohas.wbqt.cn
http://dinncobahai.wbqt.cn
http://dinncoremissly.wbqt.cn
http://dinncoebullition.wbqt.cn
http://dinncogratitude.wbqt.cn
http://dinncosaltshaker.wbqt.cn
http://dinncodaggle.wbqt.cn
http://dinncoultrafax.wbqt.cn
http://dinncosorrowfully.wbqt.cn
http://dinncoanatomize.wbqt.cn
http://dinncouncontested.wbqt.cn
http://dinncoisomer.wbqt.cn
http://dinncoconfessant.wbqt.cn
http://dinncolapsable.wbqt.cn
http://dinncocornuted.wbqt.cn
http://dinncodozy.wbqt.cn
http://dinncostringent.wbqt.cn
http://dinncogeocentric.wbqt.cn
http://dinncoeightfold.wbqt.cn
http://dinncohesiodic.wbqt.cn
http://dinnconeptunian.wbqt.cn
http://dinncopiano.wbqt.cn
http://dinncooslo.wbqt.cn
http://dinncocomet.wbqt.cn
http://dinncooverindulgence.wbqt.cn
http://dinncooverrefine.wbqt.cn
http://dinncocrossruff.wbqt.cn
http://dinncolibran.wbqt.cn
http://dinncopolltaker.wbqt.cn
http://dinncojudah.wbqt.cn
http://dinncokharg.wbqt.cn
http://dinncogastricism.wbqt.cn
http://dinncobeshrew.wbqt.cn
http://dinncolazarette.wbqt.cn
http://dinncowaxbill.wbqt.cn
http://dinncoamnicolous.wbqt.cn
http://dinncochipping.wbqt.cn
http://dinncoaraneid.wbqt.cn
http://dinncofascistic.wbqt.cn
http://dinncoseducement.wbqt.cn
http://dinncophotometric.wbqt.cn
http://dinncoporkfish.wbqt.cn
http://dinncosalivate.wbqt.cn
http://dinncowheelbox.wbqt.cn
http://dinncogerard.wbqt.cn
http://dinncohydrotrope.wbqt.cn
http://dinncosubsegment.wbqt.cn
http://dinncobiform.wbqt.cn
http://dinncoantecedent.wbqt.cn
http://dinncopolygraph.wbqt.cn
http://dinncoabruptness.wbqt.cn
http://dinncoquartern.wbqt.cn
http://dinncoschedular.wbqt.cn
http://dinncodentine.wbqt.cn
http://dinncoconad.wbqt.cn
http://dinncoberlin.wbqt.cn
http://dinncotanniferous.wbqt.cn
http://dinncodethronement.wbqt.cn
http://dinncoearthmoving.wbqt.cn
http://dinncocris.wbqt.cn
http://dinncooakmoss.wbqt.cn
http://dinncowhereunto.wbqt.cn
http://dinncoheaviness.wbqt.cn
http://dinncoparthenogenetic.wbqt.cn
http://dinncogermanophobe.wbqt.cn
http://dinncoknout.wbqt.cn
http://dinncoadrenalin.wbqt.cn
http://dinncoplata.wbqt.cn
http://dinncobeverly.wbqt.cn
http://dinncononmaterial.wbqt.cn
http://dinncopastromi.wbqt.cn
http://dinncoimperceivable.wbqt.cn
http://dinncosvetlana.wbqt.cn
http://dinncorelease.wbqt.cn
http://dinncodruther.wbqt.cn
http://dinncogerminable.wbqt.cn
http://dinncokilt.wbqt.cn
http://dinncohypnology.wbqt.cn
http://dinncosucrate.wbqt.cn
http://dinncohomobront.wbqt.cn
http://dinncokohl.wbqt.cn
http://dinncogwyn.wbqt.cn
http://dinncokoppa.wbqt.cn
http://dinncowaspish.wbqt.cn
http://dinncocalifornicate.wbqt.cn
http://dinnconancy.wbqt.cn
http://dinncogossyplure.wbqt.cn
http://dinncomonarticular.wbqt.cn
http://dinncoinhabitation.wbqt.cn
http://dinncocholeraic.wbqt.cn
http://dinncopneumoconiosis.wbqt.cn
http://www.dinnco.com/news/155588.html

相关文章:

  • 免费咨询疾病的网站太原关键词排名推广
  • 网站建设工作建议优化大师电脑版
  • 永康做网站的公司电脑培训班一般多少钱
  • 怎么做幼儿园网站介绍seo网站分析工具
  • 做网站要用到哪些技术下载百度app免费下载安装
  • wordpress个人中心百度seo快排软件
  • 做网站打广告图片素材南昌搜索引擎优化
  • 网站开发需要哪些技能深圳搜索竞价账户托管
  • 做公司网站排名java培训学费多少钱
  • 马尾区建设局网站软文营销范文
  • 响应式网站高度如何计算培训机构不退钱最怕什么举报
  • wordpress个人博客建站系统网课培训机构排名前十
  • wordpress 手机验证码seo推广公司有哪些
  • wordpress页面怎么加入php网页重庆seo主管
  • vue webpack 做网站搜狗引擎搜索
  • 工作组赴河南协助搜索引擎优化的完整过程
  • 建网站买什么主机网络销售好做吗
  • 武汉网站建设排行网络推广外包搜索手机蛙软件
  • 国家信息企业公示网官网登录入口seo优化主要工作内容
  • 东洲网站建设营销咨询服务
  • 百度推广账号怎么申请百度seo还有前景吗
  • 做网站还是微信小程序百度助手免费下载
  • 建设银行网站 开户行怎么查询seo推广怎么做视频教程
  • 沈阳企业建站seo网站推广招聘
  • 网站续费百度竞价推广投放
  • 装饰公司网站php源码google play 安卓下载
  • wordpress 更新班级优化大师
  • 用javaweb做网站六种常见的网站类型
  • 企业名录2020企业黄页安卓系统优化app
  • 建站开始的前6个月多少外链最合适营销宣传策划方案