网易首页 > 网易号 > 正文 申请入驻

前端工程化在WMS 6.0中的实践

0
分享至

Tech

导读

在对大型前端项目进行国际化改造时,经常会遇到过工作量大、干扰项多以及容易遗漏等问题。而针对这些大量的重复的工作,自动化工具往往能提升很大的工作效率。本文将带读者了解node cli开发的基础知识,并对如何开发一个国际化校验工具来解决这些问题展开教学。

01

背景

在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!

仓储中台的愿景是,以用户为根本,通过发现、定义、设计、交付可被多BP复用的WMS能力,建设以仓储中台为主导的前中台协同研发内部共生态,帮助BP低成本地快速满足WMS相关业务诉求。wms6.0 依据此愿景进行建设,旨在提供轻量部署、灵活配置、高度产品化的仓储管理系统。

为了更好的支撑业务发展,提升用户体验,降低用户接入成本,wms6.0 各个子系统于年初开始相继进行国际化改造。web端基于vue开发,于是决定使用与之配套的『Vue I18n』作为解决方案。

02

遇到的困难

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕

前端工程国际化改造的预估工期较长,主要原因是改造面临以下问题:

1.工作量大

  • 6.0前端工程包含9个子工程,其中8个工程确认必须国际化,单个子工程文件量大

  • 由于前期业务的快速迭代,未考虑国际化,国际化需要从零开始,代码改造量大

2.干扰项多

  • 代码中中文注释的存在,会对有效中文的检索定位造成干扰

  • 有些文件包含中文但是不需要国际化,也会对中文检索造成干扰

3.容易遗漏

  • 在改造完成后,传统的方案是人工检查,这很容易遗漏一些场景,导致校验不够充分

  • 接手其他人的工作,代码逻辑不够熟悉

因此,通过工具来提高生产效率和校验的准确度变得尤为重要!

03

解决方案

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

基于以上问题,在搜索相关资料并对比多个工具的实现方法后,决定使用『node cli』作为工具的实现方案,通过AST来精准识别有效中文和i18n方法调用。

使用『node cli』作为工具的实现方案,有以下几个原因:

  • 『node cli』使用 javascript 进行开发

  • 对于vue和js文件的解析有很好的第三方库支持支持

  • windows 和 macos 跨平台使用

  • IDE(WebStorm、VS Code)无关

整体的实现思路分为以下几步:

1.通过设定好的搜索规则,找到符合要求的vue和js文件,支持忽略指定目录或文件

2.读取文件的内容,将js文件转换为JS-AST,vue文件转换为Template-AST

3.通过相应的方法对AST进行遍历,在找到符合条件的代码片段后,对改造结果进行校验,并记录校验结果

4.通过文件路径合并校验结果并输出到文件中

04

具体实现

4.1 依赖库介绍

4.1.1 glob

node的glob模块使用 *等符号, 来写一个glob规则,像在shell里一样,获取匹配对应规则的文件,本次需要使用glob的sync方法进行同步搜索。

glob.sync(pattern, [options])

  • pattern {String} 待匹配的模式

  • options {Object}

  • return: {Array } 匹配模式的文件名

4.1.2 fs

fs包含node提供的一系列文档操作api,本次用到的是fs同步文件读取方法 readFileSync。

4.1.3 babel提供的工具库

@babel/parser是 babel 的核心工具之一,提供两种解析代码的方法:

  • babelParser.parse(code, [options]):解析生成的代码含有完整的 AST 节点,包含File和Program层级。

  • babelParser.parseExpression(code, [options]):解析单个 js 语句,该方法生成的 AST 不完整,所以使用@babel/traverse必须提供scope属性,限定 AST 节点遍历的范围。

@babel/traverse 提供遍历JS-AST节点的方法

@babel/types 用于判断节点类型

目前主流 JS 编译器例如 @babel/parser 定义的 AST 节点都是根据 estree/estree: The ESTree Spec (github.com) 规范来的,可以在 AST explorer 在线演示。

4.1.4 @vue/compiler-sfc

vue单文件组件(SFC)内部模板语法得到的 AST 和 JS 的AST区别很大,需要使用 @vue/compiler-sfc 来解析单文件组件,compiler-sfc 解析后的内容只需要关注 template 和 script 里的内容即可。

4.1.5 esbuild

esbuild一个JavaScript Bundler 打包和压缩工具,它可以将 JavaScript 和TypeScript代码打包分发在网页上运行,「/build/index.js」使用该工具构建。

4.2 初始化项目

4.2.1 创建项目


mkdir wms-i18n-checkcd wms-i18n-checknpm init -y

4.2.2 创建可执行文件

在 『wms-i18n-check』 根目录下新建一个文件『bin/index.js』


#!/usr/bin/env node'use strict';require('../build/index.js');

在 『package.json』 中添加配置项,然后在『/build/index.js』 实现 cli 能力


"bin": {"wms-i18n-check": "./bin/index.js"

4.3 核心实现

4.3.1 整体流程

图1 vue单文件组件解析流程

js文件的解析包含在了vue文件的解析逻辑中,所以这里以vue文件的处理过程为例。

主要的流程如上图所示:

1.使用 @vue/complier-sfc 将vue SFC 转换为Template-AST

2.分别对解析结果中的 template 和 script 进行处理:

  • template 是解析标签部分得到的AST,其内部节点主要分为两种类型 props 和 children。

  • children内部需要处理两种类型的子节点,type为5代表节点使用了插值语法(INTERPOLATION),拿到内部代码后,按照标准js代码处理即可;type为1代表节点为元素(ELEMENT),需要继续作为 Template-AST进行递归处理。

  • 遍历props,找到 type 为7(DIRECTIVE)的节点后,按照标准js代码处理即可。

  • script是解析

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
Here we go!罗马诺:米兰5000万欧签下边锋迭戈-莫雷拉

Here we go!罗马诺:米兰5000万欧签下边锋迭戈-莫雷拉

懂球帝
2026-08-17 21:15:31
男篮77-84新西兰4坏消息!篮板+防守全崩,王俊杰憋屈,继伟迷失

男篮77-84新西兰4坏消息!篮板+防守全崩,王俊杰憋屈,继伟迷失

篮球资讯达人
2026-08-17 21:19:56
15天10个涨停板!股民:吃得撑撑地!

15天10个涨停板!股民:吃得撑撑地!

数据挖掘分析
2026-08-17 15:15:06
标枪女皇严子怡教练:9月参加三大赛,如果继续练铅球或能破20米

标枪女皇严子怡教练:9月参加三大赛,如果继续练铅球或能破20米

杨华评论
2026-08-17 20:51:59
22:00预约,每人20枚!1元纪念币大涨2200%,入口公布!

22:00预约,每人20枚!1元纪念币大涨2200%,入口公布!

天天纪念币
2026-08-17 10:02:21
温兆伦每天下午三点半拎着保温杯站在小区门口,等他女儿放学

温兆伦每天下午三点半拎着保温杯站在小区门口,等他女儿放学

西楼知趣杂谈
2026-08-17 21:31:18
俄外长:得知高市涉普京言论后,俄方提出召见日本大使,日本使馆的反应“令人惊讶”

俄外长:得知高市涉普京言论后,俄方提出召见日本大使,日本使馆的反应“令人惊讶”

环球网资讯
2026-08-17 21:57:10
我给母校捐了800万,却被安排在角落,校长不耐烦地说:有意见就走,不差你这点钱,我当场撤资,20分钟后他接到银行电话傻眼了

我给母校捐了800万,却被安排在角落,校长不耐烦地说:有意见就走,不差你这点钱,我当场撤资,20分钟后他接到银行电话傻眼了

晓艾故事汇
2026-08-17 08:35:58
iPhone 17 Pro使用第17天充电口处自燃,要求换新被拒;Apple客服:回收数据线检测;平台:人为损坏,无法免费维修

iPhone 17 Pro使用第17天充电口处自燃,要求换新被拒;Apple客服:回收数据线检测;平台:人为损坏,无法免费维修

大风新闻
2026-08-17 20:11:13
秦志戬三人退出备战组!人事大调整,国乒新周期改革直面重重大考

秦志戬三人退出备战组!人事大调整,国乒新周期改革直面重重大考

运动探索
2026-08-17 09:18:33
深夜大抓捕!广东一夜抓1201人,新型黑恶专盯老百姓

深夜大抓捕!广东一夜抓1201人,新型黑恶专盯老百姓

李云飞Afey
2026-08-17 14:09:55
悲痛!不到48小时三名人相继辞世,最大105岁,每一位都让人不舍

悲痛!不到48小时三名人相继辞世,最大105岁,每一位都让人不舍

就一点
2026-08-14 16:07:23
没进步,中国男篮两连败 比赛诞生三个意想不到,世预赛前景堪忧

没进步,中国男篮两连败 比赛诞生三个意想不到,世预赛前景堪忧

南海浪花
2026-08-17 21:12:28
为何WTO很少被提起了?中国入世谈判花了15年,现在却几乎被架空

为何WTO很少被提起了?中国入世谈判花了15年,现在却几乎被架空

万物知识圈
2026-08-17 11:36:24
独家探访《牛来》出品公司,注册地址疑为家庭住所;邻居证实:导演常住这里,为人不善言辞

独家探访《牛来》出品公司,注册地址疑为家庭住所;邻居证实:导演常住这里,为人不善言辞

第一财经资讯
2026-08-16 23:55:43
《牛来》爆火,全网狂欢!业内痛批:破千万就是中国电影的耻辱

《牛来》爆火,全网狂欢!业内痛批:破千万就是中国电影的耻辱

电和影
2026-08-15 21:25:35
世锦赛最新战报:国羽4胜1负!韩悦险翻车,男双连战连捷,翁泓阳拖后腿!

世锦赛最新战报:国羽4胜1负!韩悦险翻车,男双连战连捷,翁泓阳拖后腿!

刘姚尧的文字城堡
2026-08-17 17:02:10
全网传错!郭德纲立案核心不是调侃红歌,官方定性藏关键细节

全网传错!郭德纲立案核心不是调侃红歌,官方定性藏关键细节

一盅情怀
2026-08-17 11:07:08
27年模拟选秀:火箭队连摘3人,探花签+9号签在手,重点补强分卫+中锋位置

27年模拟选秀:火箭队连摘3人,探花签+9号签在手,重点补强分卫+中锋位置

熊哥爱篮球
2026-08-17 17:53:32
四川巴中警方发布认领公告:谁的3999.577万元资金,快来认领!警方:系涉案资金,正寻合法主人

四川巴中警方发布认领公告:谁的3999.577万元资金,快来认领!警方:系涉案资金,正寻合法主人

红星新闻
2026-08-17 14:12:23
2026-08-17 22:28:49
君伟说
君伟说
分享职场故事
481文章数 48关注度
往期回顾 全部

科技要闻

马斯克600亿美元买条近路

头条要闻

男子开的"埃安"现离奇现象 续航低于300公里就狂掉电

头条要闻

男子开的"埃安"现离奇现象 续航低于300公里就狂掉电

体育要闻

黄蜂不要天马行空,只要稳稳地幸福?

娱乐要闻

立案风波席卷德云社多场巡演叫停!

财经要闻

爱丽家居跨界玩存储:溢价背后藏着机密案

汽车要闻

2027款艾瑞泽8 PRO 年轻人的务实之选

态度原创

家居
时尚
本地
亲子
公开课

家居要闻

2026建博会(广州) 公装联探展交流活动

夏天长裤子可以少穿点,试试这几款牛仔裙,减龄百搭又耐看

本地新闻

黄景藏用半刀泥刻瓷都魂

亲子要闻

什么是孩子被侵犯后的非显性回避行为?

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版