我在编写一个翻译服务的Webpack插件时遇到了问题。
目标是:
- 在编译期间获取所有必需模块的名称(和源代码)。我需要能够扫描包含特殊
t()
函数用法的源代码,但我只想扫描将包含在捆绑包中的那些模块(这取决于构建配置,可以是所有项目模块的子集)。 - 基于收集的模块,我想动态创建附加模块(带有翻译)并将它们添加到捆绑包中。这些模块需要能够导入自己的依赖项。
另一个要求是Webpack的代码拆分功能应该与动态创建的模块一起工作(我想将它们提取到单独的文件中 - 例如bundle.[lang].js
)。此外,可能超出了本问题的范围,我必须使这些带有翻译的块是可选的(因此您不必加载所有语言,而只需加载一个)。
更多详细信息可以在https://github.com/ckeditor/ckeditor5/issues/387中找到。
我尝试了多种解决方案,但 Webpack 2 的文档并不是很有帮助。我可以通过监听模块解析钩子(before-resolve
)来获取所有模块,但我不知道何时解决所有依赖项,也不知道是否可以在此之后添加更多模块(以及如何实现 - addEntry
是否可行,何时可以使用?)。
我还考虑将 Webpack 插件和 Webpack 加载器连接起来(因为我需要的功能非常类似于 Webpack's style-loader),但从插件级别,我只能添加到加载器的路径,而不能添加加载器本身,因此无法将配置对象作为参数传递 - 我错了吗?
附注:我使用 Webpack 2。如果您认为要求很奇怪,请参见 https://github.com/ckeditor/ckeditor5/issues/387 :)。
webpack.config.js
文件的方法都不令我满意。字符串替换也不是一个选项,因为我想一次性为每种语言创建翻译文件。 - Maciej Bukowski