首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角5.2不能用aot和i18n构建应用程序,获取错误:无法读取属性‘范围’的null

角5.2不能用aot和i18n构建应用程序,获取错误:无法读取属性‘范围’的null
EN

Stack Overflow用户
提问于 2018-01-31 21:42:35
回答 2查看 1.1K关注 0票数 1

使用国际化(i18n)和AOT编译器构建应用程序时发生了错误。使用JIT压缩器,我的应用程序构建得很好。

请不要建议我使用ng build --aot=false。这是一个肮脏的解决方案,我需要一个性能和更小的捆绑。

若要再现错误:创建新项目,请将内容添加到app.component.html:

代码语言:javascript
复制
<h1 i18n="site header|An introduction header for this sample">Hello i18n!</h1>

使用命令创建翻译:

代码语言:javascript
复制
ng xi18n --outputPath src/locale --outFile messages.ru.xlf

在标签中添加翻译文本。并使用命令构建应用程序:

代码语言:javascript
复制
ng build --aot --prod --i18n-file=src/locale/messages.ru.xlf --i18n-format=xlf --locale=ru

错误文本如下所示:

块主(C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:146:14)中的错误不能读取空TypeError的属性'range‘:不能在enterNode上读取enterNode 'range’of null,在getPathInAst TypeError at getPathInAst上读取属性‘range’(C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:134:24) at enterNode (C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:149:18) at getPathInAst (C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:138:25)(C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:149:18) at 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( (C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:149:18) at 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)在(C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:536:23) at Array.forEach (原生) at modulesWithInfo.forEach.info (C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:524:34) at Array.forEach (原生)在(C:\Users\admin\Desktop\angular-test\my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:516:19) ConcatenatedModule.source

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-08 11:11:58

试着

ng build --prod -vc=true

或者仅仅是-vc,因为true是--prod的默认值。

vc是供应商块的别名,意味着使用一个只包含供应商库的单独包。由于某些原因,在此版本的角cli中,默认情况下它不能很好地工作。

票数 1
EN

Stack Overflow用户

发布于 2018-02-01 07:17:05

我找到了如何关闭这个错误,但我不知道是什么导致了这个错误。如果认识webpack,请告诉我错误的来源。很快,我的解决方案如下:

在文件my-app\node_modules\webpack\lib\optimize\ConcatenatedModule.js:146中添加代码:

代码语言:javascript
复制
    if (n === null)
        return undefined;

总的代码必须是这样的:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48551929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档