【问题标题】:Angular 2 RC 6 AoT Compiler not workingAngular 2 RC 6 AoT 编译器不工作
【发布时间】:2017-01-10 00:24:57
【问题描述】:

我刚刚将我的项目更新到 Angular 2 RC 6。我现在正尝试使用博文 http://angularjs.blogspot.com/ 中提到的提前 (AoT) 编译,但没有成功。

我在 ASP.Net 中构建项目时没有使用 angular cli。

正如博文所说,我已经安装了@angular/compiler-cli

但是当我尝试从命令提示符运行 ngc 时,它给出了错误

'ngc' is not recognized as an internal or external command,
operable program or batch file.


npm run ngc
npm ERR! Windows_NT 10.0.10586
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "ngc"
npm ERR! node v6.4.0
npm ERR! npm  v3.10.3

npm ERR! missing script: ngc
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     D:\Project\App\npm-debug.log

谁能指导如何在 ASP.Net 项目中使用 AoT 编译器。或者当您不使用 Angular CLI 而是手动构建组件等时。

编辑

我现在设法通过首先移动到 ./node_modules/.bin/ 然后运行 ​​

来运行 ngc
ngc -p D:\Project\App

但是现在编译器抛出以下错误:

当我尝试用 ngc 编译我的项目时,它会抛出以下错误:

Error: Error encountered resolving symbol values statically. Function calls are not supported. Consider replacing the function or lambda with a reference to an exported function (position 92:25 in the original .ts file), resolving symbol AppModule in

在我的应用程序模块中,我有以下提供程序,这可能是导致该项目的原因。我不确定这到底有什么问题?

providers: [
        GlobalService,
        {
            provide: Http,
            useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, globalService: GlobalService) => new HttpLoading(backend, defaultOptions, globalService),
            deps: [XHRBackend, RequestOptions, GlobalService]
        }
    ],

【问题讨论】:

  • 如果您查看答案,这是一个 Windows 问题,您的 PATH 可能已经搞砸了,或者您需要重新启动,甚至以管理员身份打开 CMD。不幸的是,这可能是很多事情。试一试!
  • 感谢 Mark 的回复,您能看看我对这个问题所做的编辑吗?

标签: angular angular2-services angular2-compiler


【解决方案1】:
        GlobalService,
        {
            provider: Http, // <-- I believe you were missing the "r" in provide"r"
        }

看看 rc6 的重大变化:

https://github.com/angular/angular/blob/master/CHANGELOG.md#breaking-changes

【讨论】:

    【解决方案2】:

    我在使用

    时遇到了这个问题
    "@angular/compiler-cli": "^4.0.1"
    

    对我来说,删除 /node_modules/@angular 文件夹并运行

    npm install
    

    似乎解决了我的问题。我的包裹副本一定被弄乱了

    【讨论】:

      【解决方案3】:

      问题 1

      从 package.json 或“npm scripts”运行脚本时,要修复 Windows 10 上的路径问题,您需要将 directory_path 用双引号括起来,并用反斜杠转义每个双引号:

      "compile:aot": \"./node_modules/.bin/ngc\" -p src

      这将使用-p src 参数执行位于./node_modules/.bin 中的ngc 程序。

      否则,您必须将 cd ./node_modules/.bin &amp;&amp; ngc -p src 作为 2 个不同的命令。

      问题 2

      目前看来,Angular 2 的 AOT 编译在 require() 语句方面存在问题。所以如果你想消除编译错误,你必须从你的应用程序中删除所有的 require() 语句。

      显然,这是一个坏主意,因为 require() 是有价值的,尤其是在使用 Webpack 或其他模块捆绑器时。我们必须等待 angular2 团队的解决方案。

      【讨论】:

      • 嗨@TetraDev,回复。问题 2,对于这个 AOT Vs require() 问题,您还有更多信息来源吗?我找不到任何东西,但是当我尝试需要一个“全局”CSS文件并在生产中进行AOT构建时,我遇到了这个问题。谢谢
      • @Superjos 是的,而不是require('my.css');,只需执行import 'my.css';,AOT 就可以正常编译。
      • 感谢您的回复。我忘记了我的问题。在某些时候,我们采用了与您相同的解决方法。后来,将依赖项升级到当前可用的最新版本,我发现require() 又可以工作了。尝试使用 @angular 2.1.0 依赖项,如果还不够,还可以使用 webpack 2.1.0-beta.25
      • 仅供参考,有一个 PR 正在接受要求。 github.com/angular/angular/pull/12405
      【解决方案4】:

      可能是您的@NgModule 定义中有函数调用。 我必须删除一些动态提供程序才能使其对我有用。

      也许您应该尝试替换您的 'useFactory: (...)=>{...}' 或至少测试评论它。

      【讨论】:

      • 我猜模块定义中的函数是在运行时,所以 AOT 肯定会失败。
      猜你喜欢
      • 2017-01-10
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2018-02-27
      • 2017-01-13
      • 2017-05-29
      • 1970-01-01
      • 2017-03-10
      相关资源
      最近更新 更多