@ngtools\webpack AOT不起作用或95%发射冻结

JBo*_*hUA 5 webpack angular2-aot angular

我一直在试图让AOT使用我的Webpack应用程序.(@ ngtools /的WebPack)

任何人都可以帮助我吗?

它似乎工作,但compiler.js仍然包含在捆绑包中.此外,它仍然在寻找我所有的.html文件,并在所有组件模板上获得404.

所以据我所知,它并没有真正做到AOT最好的部分?

在这里任何光线都可以闪耀,我被卡住!

谢谢!!

JBo*_*hUA 0

如果单个文件处理不正确或根本没有加载,您将在 95% 发射时遇到无限循环。

更新::似乎有一个区域会吞掉错误:

reject(new Error('Child compilation failed:\n' + errorDetails));
Run Code Online (Sandbox Code Playgroud)

这是 @ngtools\webpack\src\resource_loader.js 的第 57 行,您需要放置一个断点来调试或输出该错误详细信息,否则您将永远陷入 AOT 编译。

只是留下这个以防万一有人被困在未来,基本上,如果你陷入无限循环,你可能走在正确的轨道上。

终于有东西可以做了,一路上遇到了很多问题。

我想,让我不明白的主要事情是,对于 AoT,所有文件都必须加载到 webpack 中

这是最终让我运行的 module.rules 配置...

// Ahead of Time Compilation
[{ test: /\.ts$/, loader: '@ngtools/webpack', exclude: [/\.(spec)\.ts$/] },
// AoT requires all files to be loaded
{ test: /\.html$/, loader: 'html-loader' },
{ test: /\.css$/, loader: 'raw-loader' },
{
    test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
    loader: 'file-loader', options: { name: '[path][name].[ext]' }
}]
Run Code Online (Sandbox Code Playgroud)

我添加了这个加载程序,它基本上只是将我的图像放回到它们存在的完全相同的位置..但我想这会导致它们被正确打包..

如果我不包含文件类型(或者如果加载文件时出现某种错误,请参阅下面的评论),那么我就会陷入无限循环......

如果你使用 --progress --profile 运行 webpack,你会发现它卡在 95% 的发射上。幕后发生的事情是某种绝对路径与相对路径问题,它陷入了 mkdirp 的循环中。

但我想 AoT 的诀窍是确保您拥有适用于您正在使用的每种文件类型的加载程序。