魔王のサタンぶろぐ

Angular-cli "ERROR in Error encountered resolving symbol values stativally, Calling function 'XXXX' ....." なにそれおいしいの

はじめに

typescriptをgulp使ってトランスパイルしてたけど、Angular-cliコンパイルしたほうがWebpack使ってbundle作ってくれるから便利じゃん。

って思って移行した際、gulpなら問題なかったんだけど、Angular-cliでエラーが出て時間を費やした話。

エラー文

ERROR in Error encountered resolving symbol values statically. Calling function 'XXXX', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol YYYY in [PATH]....

対象

よくわからないが、AoTだとうまくいかない問題はGitでissueに登録されている内容。(Angular5.Xなら動くみたいな意見もある)

でも僕はAngular 4.X で動かしたいの!って人向けの記事。

環境

  • Angular 4.X
  • Webpack 3.X
  • Webpack-dev-server 2.X

Angular-cliで作成したプロジェクトに対し

npm eject

で、webpackを吐かせた状態。

今回のツボ

Angular-cli AoTのバグ回避方法

状態

JiT ( webpack-dev-server ) で行った際、最初Errorが出るが、適当なファイルで保存すると自動更新がかかる。その際、なにも変更してないのにComplete!とか出る訳の分からないバグ。

同じプロジェクトをAoT( webpack )でローカルにbundle欲しいから実行すると、まぁ1回目だからエラーで動かなくて何も排出されない。

回避方法

結論 : JiTで出せればいい。

webpack-dev-serverを使うと、メモリ上にbundleが生成されるため、拾えない。 だから、webpackでWatchしてやればいい。

package.jsonに追記

scriptsのところに追加してやりましょう

"scripts":{
  "watch": "webpack --watch --config webpack.config.js ",
}

これでコマンドで

npm watch

で実行。1回目エラーだけど、適当なファイルで保存更新すれば、webpack.config.jsに指定したoutputファイルに出るでしょう。

結論

なんかうーんって感じだけど、出力したい!は達成できた。

バイン!