我目前正在研究一个角度 4.4 项目,该项目是用 angular-cli 创建的,但从 angular-cli 中弹出。在我们的 webpack.config 中,我们使用AOTPlugin
和ExtractI18nPlugin
来自@ngtools/webpack
使用角度提前编译和提取基于我们的 i18n-Html-Attributes 的messages.xlf
。每次我们使用此 webpack 配置运行构建任务时,messages.xlf
都会更新。
更新到 Angular 5.2.1 后,我们将AOTPlugin
替换为AngularCompilerPlugin
,如@ngtools/webpack
自述文件中所述:https://github.com/angular/angular-cli/tree/master/packages/%40ngtools/webpack。工作得很好。
但是,没有提到如何从ExtractI18nPlugin
迁移,这似乎也被弃用了。如果我们将其保留在 webpack.config 中,则构建任务将失败并显示错误消息:请更新@angular/cli。Angular 5+ 至少需要 Angular CLI 1.5+。当然,我们所有的依赖项都是最新的,并且已经完全重新安装了几次(包括 angular-cli,我们不将其用于构建任务)
新的 AngularCompilerPlugin在界面AngularCompilerPluginOptions中定义了一些关于 i18n 的选项:
...
i18nInFile?: string;
i18nInFormat?: string;
i18nOutFile?: string;
i18nOutFormat?: string;
locale?: string;
...
https://github.com/angular/angular-cli/blob/master/packages/%40ngtools/webpack/src/angular_compiler_plugin.ts#L57
但是它们(似乎)没有效果,也没有关于如何使用它们的文档。
在寻找解决方案时,我发现这个示例项目演示了我们当前的场景,但它只在 angular 5 beta 之前有效。现在有一个 github 问题描述了我们的确切问题:https://github.com/ocombe/i18n-demo-no-cli
关于如何使用角度 18 再次运行我们的 i5.X 提取的任何想法?
找到了一个解决方案:如果选项skipCodeGeneration
(禁用 AOT 编译)设置为true
,则AngularCompilerPlugin
跳过 i18n 提取。
我们的 i18n 提取工作配置现在如下所示:
new AngularCompilerPlugin({
mainPath: 'src/main.ts',
i18nOutFile: path.join('src', 'i18n', 'messages.xlf'),
i18nOutFormat: 'xlf',
locale: 'en',
sourceMap: true,
tsConfigPath: 'tsconfig.json',
skipCodeGeneration: false,
compilerOptions: {}
})