目前使用的多语言解决方案说明
现在使用的i18n插件来自插件商店那个,其实已经满足大部分需求了
在那个插件基础上,我想实现构建剔除其他语言的功能,先看一下目录结构吧

目录规划大致是这样子的,每个语言都会对应一个js和一个资源文件夹,拿Chinese举例
- chinese 目录: 存放该语言对应的图片
- xx.png 该语言的图片资源文件
- chinese.js 存放该语言对应的label文字
- i18n.json :插件的配置文件,里面包含了运行时要设置的语言
这种方案目前解决了我的需求,多个语言公用一个项目,但是这样有一个问题,就是发布后的项目里面包含了所有的语言及其资源图片,于是我想到了再构建流程中剔除其他语言的资源,也就是说
i18n.json里面会声明要使用的语言,比如是chinese,那么构建的时候,仅仅保留
- i18n.json文件
- chinese.js文件
- chinese目录
剩下的目录全部删除,不让其参与编译,也不导出,这样就解决了包体的问题
遇到的问题
问题就在构建剔除这块,参考了自定义构建流程文档,于是我选择在’before-change-files’进行处理
function onBeforeBuildFinish (options, callback) {
let buildResults = options.buildResults;
}
-
剔除文件夹的资源图片
-
思路: buildResults里面列出了详细的构建资源,通过相关api,我能找到要删除文件的构建后位置,并进行删除
-
问题:如果直接删除,构建后运行时有问题的,因为在settings.js文件里面罗列了进入游戏要加载的文件,所以,还要对settings.js进行额外的处理
-
剔除chinese.js文件
-
思路:很遗憾,代码会被压缩到src/project.js里面,我为了剥离处理,设置脚本为插件,即可将这部分代码从src/project.js中剥离出来
-
问题: 现在能删除chinese.js了,但是问题还是指向了settings.js,里面同样有对其的引用,这个可能好处理,因为发现其实在 jsList 字段里面
其实最终的问题都指向了settings.js,这里面处理ok了,应该问题不大,很遗憾,又遇到了一个很严重的问题,就是在 ‘before-change-files’ 阶段,并没有产生settings.js文件,这。。。。
![]()
跪求大佬们给个指点,剔除脚本感觉好蓝瘦
