使用Internationalization(i18n)和AOT编译器构建应用程序时发生错误。使用JIT compiller我的应用程序构建良好。
请不要建议我使用ng build --aot=false
。这是一个肮脏的解决方案,我需要一个性能和更少的捆绑包。
要重现错误:创建新项目,将内容添加到app.component.html:
<h1 i18n="site header|An introduction header for this sample">Hello i18n!</h1>
使用命令创建翻译:
ng xi18n --outputPath src/locale --outFile messages.ru.xlf
在标记&lt; target&gt;&lt; / target&gt;中添加翻译文本。 并使用命令构建应用程序:
ng build --aot --prod --i18n-file=src/locale/messages.ru.xlf --i18n-format=xlf --locale=ru
错误文本将是:
块主要错误[初始] [名称]。[chunkhash:20] .bundle.js不能 阅读财产&#39;范围&#39; null TypeError:无法读取属性&#39; range&#39; 为null 在enterNode(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:146:14) 在getPathInAst(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:125:24) at getPathInAst(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:134:24) 在enterNode(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:149:18) 在getPathInAst(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:138:25) 在enterNode(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:149:18) 在getPathInAst(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:125:24) at getPathInAst(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:134:24) 在enterNode(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:149:18) 在getPathInAst(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:125:24) at getPathInAst(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:134:24) 在info.moduleScope.variables.forEach.variable(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:536:23) at Array.forEach(native) 在modulesWithInfo.forEach.info(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:524:34) at Array.forEach(native) 在ConcatenatedModule.source(C:\ Users \ admin \ Desktop \ angular-test \ my-app \ node_modules \ webpack \ lib \ optimize \ ConcatenatedModule.js:516:19)
答案 0 :(得分:1)
我找到了如何关闭此错误,但我不知道导致此错误的原因。如果知道webpack,请告诉我错误的来源。简而言之,我的解决方案如下:
在文件my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:146
中添加代码:
if (n === null)
return undefined;
总代码必须是这样的:
function enterNode(n) {
if (n === null)
return undefined;
const r = n.range;
if(r) {
if(r[0] <= nr[0] && r[1] >= nr[1]) {
const path = getPathInAst(n, node);
if(path) {
path.push(n);
return path;
}
}
}
return undefined;
}
答案 1 :(得分:1)
尝试
ng build --prod -vc=true
或只是-vc,因为true是--prod
的默认值vc是供应商块的别名,意味着使用仅包含供应商库的单独包。 出于某种原因,在此版本的angular cli中默认情况下它无法正常工作